poj 3069 Saruman's Army 贪心 题解《挑战程序设计竞赛》

地址 http://poj.org/problem?id=3069

题解

题目可以考虑贪心 尽可能的根据题意选择靠右边的点

注意

开始无标记点 寻找左侧第一个没覆盖的点 再来推算既可能靠右的标记点为一轮

我最开始就是轮次的操作理解错误 结果wa了

ac代码如下

复制代码
 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 
 6 using namespace std;
 7 
 8 /*
 9 poj3069
10 
11 题目大意:一个直线上有N个点。点i的距离是Xi。
12 从这些点中选取若干个加上标记。
13 要求:对于每个点,与其距离为R的范围内必有做标记的点(包括自身)。
14 求至少标记多少点才能满足要求。
15 
16 输入
17 N=6 R =10
18 X={1 7 15 20 30 50}
19 输出 
20 3
21 
22 
23 Sample Input
24 
25 0 3
26 10 20 20
27 10 7
28 70 30 1 7 15 20 50
29 -1 -1
30 Sample Output
31 
32 2
33 4
34 */
35 int nodes[100010];
36 
37 int solve(int r,int n)
38 {
39     int count = 0;
40 
41     int leftNotCover = 0;
42     int currMark = 0;
43 
44     while (leftNotCover < n) {
45         //找到最左边 第一个未覆盖的点
46         if (leftNotCover != 0) {
47             while (currMark < n && nodes[leftNotCover] - nodes[currMark] <= r) leftNotCover++;
48             if (leftNotCover >= n) break;
49         }
50 
51         currMark = leftNotCover;
52         while (currMark < n && nodes[currMark] - nodes[leftNotCover] <= r) currMark++;
53         count++;
54         currMark = currMark - 1;
55         leftNotCover = currMark + 1;
56     }
57 
58 
59     return count;
60 }
61 
62 int main()
63 {
64     int r = 0;
65     int n = 0;
66     while (1) {
67         cin >> r >> n;
68         if (r == -1 || n == -1) return -1;
69 
70         for (int i = 0; i < n; ++i) {
71             cin >> nodes[i];
72         }
73         sort(nodes, nodes + n);
74         cout <<solve(r, n) << endl;
75     }
76 
77     return 0;
78 }
View Code
复制代码

 

posted on   itdef  阅读(323)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示