【贪心】POJ - 3069 Saruman's Army

题意

给n个点,从中选择若干个标记,在距离标记为r的范围内包含其他的点,最少需要几个标记,才能将所有的点包含在内

思路

贪心。先排序,从最左边的点开始找到此半径内最大的点,则此点就是第一个标记,以此类推

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7 const int maxn = 20000 + 5;
 8 int n, m, T;
 9 int s[maxn];
10 int main()
11 {
12    
13     while(scanf("%d %d", &m, &n) == 2 && m != -1) {
14         for(int i = 0; i < n; i++) {
15             scanf("%d", &s[i]);
16         }
17         sort(s, s+n);
18         int ans = 0;
19         int i = 0;
20         while(i < n) {
21             int t = s[i++] + m;
22             while(i < n && s[i] <= t) {
23                 i++;
24             }
25             t = s[i-1] + m;
26             while(i < n && s[i] <= t) {
27                 i++;
28             }
29             ans++;
30         }
31         printf("%d\n", ans);
32     }
33     return 0;
34 }

 

posted @ 2017-01-29 15:35  kikii233  阅读(119)  评论(0)    收藏  举报