poj 3069 继续弱鸡的贪心

题意:给出指路石的范围,问最小需要几个指路石可以覆盖所有的军队。

题解:排序一遍,然后扫出起始区间和终止区间,就可以求出最小的覆盖数了

ac代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    cin.sync_with_stdio(false);
    int n,m;
    int a[2001];
    while(cin>>n>>m)
    {
        if(n==-1 && m==-1) break;
        for(int i=1;i<=m;i++) cin>>a[i];
        sort(a+1,a+1+m);
        int ans=0;
        int flag=0;// 0->start   1->end
        int pos;
        int i=1;
        while(i<=m)
        {
            if(flag==0)
            {
                int temp=a[i]+n;
              //  cout<<temp<<endl;
                while(a[i]<=temp) i++;
                i--;
                flag=1;
                ans++;
            }
            else
            {
                int temp=a[i]+n;
                while(a[i]<=temp) i++;
                flag=0;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

posted @ 2017-08-24 19:31  猪突猛进!!!  阅读(83)  评论(0编辑  收藏  举报