POJ 3069

来源:互联网 发布:apache lucene 编辑:程序博客网 时间:2024/06/08 13:48
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <string>#include <cstring> #include <vector>#include <set>#include <queue>#include <map>using namespace std;const int MAXN = 1000 + 10;const int MAXM = 1000000000 + 1000;typedef long long LL;/*POJ 3069【难题】关键:从没标记的点开始,找到距离R内最远的那个点进行标记并以此类推*/int main(){int N,R;scanf("%d %d",&R,&N);// N:number of roads, M:coins for guardwhile( !(N==-1 && R==-1) ){int v[MAXN] = {0};int x;for(int i=0; i<N; i++){scanf("%d",&(v[i]));}sort(v,v+N);int need = 0,i = 0,cnt = 0;while( i<N ){int range = v[i]+R;//查找要标记的点的查找范围 while( v[i+1]<=range && i<N ){i++;}// 标记v[i]range = v[i]+R;while( v[i+1]<=range && i<N ){i++;}i++; cnt++;//一次标记完成 }cout << cnt << endl;scanf("%d %d",&R,&N);}return 0;}

0 0