码迷,mamicode.com
首页 > 其他好文 > 详细

poj3069

时间:2018-05-31 02:29:54      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:logs   link   poj3069   贪心   i++   tin   htm   can   bre   

本文地址:https://www.cnblogs.com/maplefighting/p/9114408.html

题目名称:Saruman‘s Army

链接:http://poj.org/problem?id=3069

题意:在军队直线上有 n 个点,记为 xi,每个点的影响范围距离为 R ,计算最少需要多少点才能覆盖所有的点

思路:从最左边的点开始考虑,选取在距离 R 以内最远的点,这样就能保证左边的点能覆盖到,而且贪心策略使得点可以最少。剩下的也可以按照同样的方法。对于选取的点距离为 R 之外的第一个点进行相同处理。

代码如下:

技术分享图片
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[1005];
 5 int main() {
 6     int R,n;
 7     while(scanf("%d%d", &R, &n) != EOF) {
 8         if(R == -1 && n == -1)
 9             break;
10         for(int i = 0; i < n; i++)
11             scanf("%d", &a[i]);
12         sort(a,a + n);
13         int sum = 0, i = 0;
14         while(i < n) {
15             int left = a[i++];
16             while(i < n && a[i] <= left + R) ++i;
17             int middle = a[i - 1];
18             while(i < n && a[i] <= middle + R) ++i;
19             sum++;
20         }
21         printf("%d\n", sum);
22     }
23     return 0;
24 }
View Code

 

poj3069

标签:logs   link   poj3069   贪心   i++   tin   htm   can   bre   

原文地址:https://www.cnblogs.com/maplefighting/p/9114408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!