您的位置:首页 > 其它

poj 3069 Saruman's Army

2017-09-23 10:28 441 查看
题目:


贪心算法,先对x[i]从小到大排序,然后从x[0]开始遍历,找到x[0]+R能覆盖的最远的点i,找到x[i]+R能覆盖的最远的点l。再以l为起点循环上述过程

AC情况:



代码:

#include<iostream>
#include<algorithm>
using namespace std;

int x[1005];

int main() {
int R, N,cnt;
while (scanf("%d%d",&R,&N)){
if (R == N&&N == -1) break;
cnt = 0;
for (int i = 0; i < N; i++)
scanf("%d", &x[i]);
sort(x, x + N);

for (int i=0; i < N;) {
int t = i;
cnt++;
while (x[t] + R >= x[i++]);
i=t = i-2;
while (x[t] + R >= x[i++]);
i--;

}
printf("%d\n", cnt);
}

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