poj 3069
2015-04-02 22:38
190 查看
/*
直线上有N个点,点x的位置是xi(距最左端),现在要加上标记
对于每个点,要求是在一个为R的圆的范围内需要一个点被标记
问最少需要标记多少个点
算法设计: 贪心算法设计
从左端第一点开始,距离其最远的不超过R的那个点加上标记,然后将那个
被标记的点当作第一个点,向后找那个距离其最远的不超过R的那个点,然后
加上标记,一直这样做下去直到覆盖了所有的电
*/
直线上有N个点,点x的位置是xi(距最左端),现在要加上标记
对于每个点,要求是在一个为R的圆的范围内需要一个点被标记
问最少需要标记多少个点
算法设计: 贪心算法设计
从左端第一点开始,距离其最远的不超过R的那个点加上标记,然后将那个
被标记的点当作第一个点,向后找那个距离其最远的不超过R的那个点,然后
加上标记,一直这样做下去直到覆盖了所有的电
*/
#include<iostream> #include<algorithm> #define max_n 1001 using namespace std; int R, N; int x[max_n]; void solve() { sort(x, x + N); int s = 0, ans = 0; while (s < N){ //d是没有被覆盖到的最左边的点 int d = x[s++]; //一直向右走直到距s的距离大于了R while (s < N&&x[s] <= d + R) s++; //m是新加上标记的点的位置 int m = x[s - 1]; //一直向右前进直到距离p的距离大于R while (s < N&&x[s] <= m + R) s++; ans++; } cout << ans << endl; } int main() { while (cin >> R >> N){ if (R == -1 && N == -1){ break; } int i; for (i = 0; i < N; i++){ cin >> x[i]; } solve(); } return 0; }
相关文章推荐
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army 笔记
- POJ-3069-Saruman's Army
- POJ - 3069 Saruman's Army 萨鲁曼的大军 贪心 重庆一中高2018级竞赛班第三次测试 2016.7.24 Problem 2
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army [贪心]
- poj 3069贪心~
- POJ-3069-Saruman's Army
- POJ 3069
- Saruman's Army POJ - 3069
- POJ 3069
- poj 3069
- 贪心基础题(区间调度问题+POJ_3617+POJ_3069)
- poj 3069 Saruman's Army
- poj 3069 Saruman's Army
- POJ 3069 Saruman's Army (贪心)
- D - Saruman's Army POJ - 3069
- POJ 3069-Saruman's Army [贪心] 《挑战程序设计竞赛》2.2
- 刷题——Saruman's Army POJ - 3069