您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: