您的位置:首页 > 其它

pku 3069 - Saruman's Army

2016-06-21 07:44 232 查看
題目:在一條馬路上有很多個點,在某些點上安裝照明半徑是r的燈,求最小的燈覆蓋所有的點。

分析:貪心。每次從左享有掃描找到最大的覆蓋範圍,確定下一個點即為最少。

說明:測試樣例輸出有問題,第一個輸出的3,╮(╯▽╰)╭。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int x[1001];

int main()
{
int r, n;
while (~scanf("%d%d",&r,&n) && (r != -1 && n != -1)) {
for (int i = 0; i < n; ++ i) {
scanf("%d",&x[i]);
}
sort(x, x+n);
int i = 0, ans = 0;
while (i < n) {
int s = x[i ++];
while (i < n && x[i] <= s+r) {
++ i;
}
int p = x[i-1];
while (i < n && x[i] <= p+r) {
++ i;
}
++ ans;
}

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