POJ3069---Saruman's Army()

来源:互联网 发布:命令者模式 java 编辑:程序博客网 时间:2024/05/21 19:33

标准的贪心策略。从左往右依次扫描,尽可能地使一次安装尽可能多地覆盖!

#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;    }}
原创粉丝点击