POJ3069

http://poj.org/problem?id=3069
思路:这个点最好是在中心,这样就可以往左右覆盖,所以用贪心的想法从最左点开始算起。

#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;

int r,n;
int x[1010];

int main()
{
    while(scanf("%d %d",&r,&n)==2&&n!=-1&&r!=-1){
        int i=0;
        for(i=0;i<n;i++){
            scanf("%d",&x[i]);
        }
        sort(x,x+i);
        i=0;
        int ans=0;
        int left=x[0];
        int nleft=0;
        while(i<n){
            left=x[i++];
        while(left+r>=x[i]&&i<n)i++;
            nleft=x[i-1];
        while(r+nleft>=x[i]&&i<n)i++;
            ans++;
        }
        printf("%d\n",ans);
    }
    
    
        
   return 0;
}

上一篇:elasticsearch的一些常见问题


下一篇:OptaPlanner - How much faster is Java 17