题目来源:POJ 3069
简单题目分析:
在x轴上给你若干点的坐标,这些点的坐标上可以放置一个装置,这个装置可以影响到这个点向左扩展R个单位和这个点向右扩展R个单位的范围(可以理解为该点的一个R邻域)。问至少安装几个装置可以影响到所有给定的点。
从左开始贪心即可。从左边第一个点开始,向右扩展R个单位,在这R个单位中找到最右边的点,以这个点为基础放一个装置,再向右扩展R个单位,找到最左边的不在R个单位内的点作为起始点,再重复上述操作即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
int main()
{
int r,n;
while(~scanf("%d%d",&r,&n))
{
if(r==-1&&n==-1)
break;
int temp[1005];
for(int i=1;i<=n;++i)
scanf("%d",&temp[i]);
sort(temp+1,temp+1+n);
int cnt=0;
int j=1;
while(j<=n)
{
int s=temp[j++];
while(j<=n&&temp[j]<=s+r)
j++;
int e=temp[j-1];
while(j<=n&&temp[j]<=e+r)
j++;
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
ps:考试月终于过去了...一个月没更新,做题都很生疏了!(虽然之前的水平也不怎么高)