题目链接:http://poj.org/problem?id=3069
中文大概意思:
思路:
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int data[1010];
int fun(int R,int nums);
int main(){
int R,nums;
while(scanf("%d%d",&R,&nums) && (R!= -1 && nums!=-1)){
for(int i = 0;i<nums;i++)
scanf("%d",&data[i]);
printf("%d\n",fun(R,nums));
}
return 0;
}
int fun(int R,int nums){
sort(data,data+nums);
int ans = 0;
for(int i = 0;i<nums;){
ans++; //i就是p1 ,ps:最后那一点零头也会被标记一次
int j,k;
for( j = i+1;j<nums && (data[j] - data[i] <= R);j++){ //循环到右边最后一个能覆盖p1的,为j-1点,j-1点为被标记点
;
}
for (k = j; k < nums&&(data[k] - data[j - 1] <= R); k++) {//循环到标记点半径不能在覆盖右边那一个点,即为k点
;
}
i = k;
}
return ans;
}