POJ 3069 Saruman's Army
2014-02-18 01:46
267 查看
题目:
http://poj.org/problem?id=3069
题解:
1.选择起始点,从最左边的点开始,R距离内要有标记点,标记点为R距离内最右侧的点。
2.标记点R距离内的点都已覆盖到,去掉,重新选择起始点。循环第一步。
代码:
#include<stdio.h>
#include<algorithm>
int a[1010];
int N,R;
void solve()
{
std::sort(a,a+N);
int i=0,sum=0;
while(i<N)
{
int s=a[i++];
while(i<N&&a[i]<=s+R) i++;
int p=a[i-1];
while(i<N&&a[i]<=p+R) i++;
sum++;
}
printf("%d\n",sum);
}
int main()
{
while(scanf("%d%d",&R,&N),N!=-1&&R!=-1)
{
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
solve();
}
return 0;
}
http://poj.org/problem?id=3069
题解:
1.选择起始点,从最左边的点开始,R距离内要有标记点,标记点为R距离内最右侧的点。
2.标记点R距离内的点都已覆盖到,去掉,重新选择起始点。循环第一步。
代码:
#include<stdio.h>
#include<algorithm>
int a[1010];
int N,R;
void solve()
{
std::sort(a,a+N);
int i=0,sum=0;
while(i<N)
{
int s=a[i++];
while(i<N&&a[i]<=s+R) i++;
int p=a[i-1];
while(i<N&&a[i]<=p+R) i++;
sum++;
}
printf("%d\n",sum);
}
int main()
{
while(scanf("%d%d",&R,&N),N!=-1&&R!=-1)
{
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
solve();
}
return 0;
}
相关文章推荐
- POJ:3069 Saruman's Army(贪心)
- POJ 3069 Saruman's Army 贪心
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army(贪心)
- poj 3069 Saruman's Army
- poj 3069 Saruman's Army
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army 【贪心】
- POJ 3069 Saruman's Army(贪心+区间覆盖)
- POJ 3069 Saruman's Army 笔记
- POJ 3069 Saruman's Army [贪心]
- POJ 3069 Saruman's Army
- Poj 3069 Saruman's Army【贪心】
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army(贪心算法)
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army
- poj 3069 Saruman's Army 贪心
- poj 3069 Saruman's Army