您的位置:首页 > 其它

POJ3069---Saruman's Army()

2017-11-17 16:01 393 查看
标准的贪心策略。从左往右依次扫描,尽可能地使一次安装尽可能多地覆盖!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int a[1005];

int main()
{
int r,n;
while (cin >> r >> n, r != -1 && n != -1)
{
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int i = 0, ans = 0;
while (i < n)
{
int s = a[i++];//x代表没有覆盖的最左边的点。
while (i < n&&a[i] <= s + r)i++;
int p = a[i - 1];//p为s位置能扫描到的最右边的点,也就是安装点。实际上是反向扫描。
while (i < n&&a[i] <= p + r)i++;//刚安装的能扫描的最右端。
ans++;                  //一次循环安装一个。
}
cout << ans << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: