poj 3069 Saruman's Army
/** poj 3069 Saruman's Army * 05.05/2014 */ #include <cstdio> #include <string>//for memset #include <algorithm> #define MAXN 4000 #define INF 100000000 using namespace std; int N,R; int X[MAXN]; void solve() { int i =0,count = 0; while(i < N) { int s = X[i++]; while(i < N && X[i] <= s + R) i++; int p = X[i-1]; while(i < N && X[i] <= p + R) i++; count ++; } printf("%d\n",count); return; } int main() { while(scanf("%d %d",&R,&N) != EOF) { if(R==-1&&N==-1) break; for(int i = 0; i < N; i++) scanf("%d",&X[i]); sort(X,X+N); solve(); } return 0; }
题目:
找最少数目的点,使其能在辐射半径内覆盖所有的点。
分析:
贪心。从数轴左端到右端,每次找最右的、辐射半径范围内的点。
心得:
没什么好说的。注意半径要算2次才是总的辐射范围。