【问题描述】
萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度。于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头。
萨鲁曼给出n块石头的位置Xi,现在需要在这些位置中选择若干个位置设置路灯。每盏路灯的照亮范围为R,即若你在Xi处设置了一盏路灯,则在[Xi-R,Xi+R]的范围内都会被照亮。
现在请你计算最少设置多少盏路灯,就能把所有石头照亮。

【输入格式】
含多组测试数据,每组数据占两行:第一行为 R 和 n ,第二行包含n个整数,表示Xi。

【输出格式】
每组数据输出一行一个整数,表示最少的路灯数量。

【输入样例】

0 3
10 20 20
10 7
70 30 1 7 15 20 50
-1 -1

【输出样例】

2
4

【样例解释】
第一组数据,两盏路灯分别设置在10和20的位置
第二组数据,在位置7处设置一盏路灯(可以照亮1,7,15处的石头),在位置20处设置一盏路灯(可以照亮20,30l处的石头),在位置50处设置一盏路灯(可以照亮50处的石头),在位置70处设置一盏路灯(可以照亮70处的石头)。

【数据范围】
1<=n<=1000 , 0<=R,Xi<=10^9
最多不超过1000组数据

【来源】
Stanford Local 2006

思路:首先从最左边开始考虑,显然,从左边起,标记的第一个点,在最左边点的右侧。且选择距离R内距离其最远的点。接着,把上一次标记的这个点 能影响的最右边的点的下一个点,作为最左边的点,开始又一次标记。

/*Name: salu.cppCopyright: Twitter & Instagram @stevebieberjrAuthor: @stevebieberjrDate: 25-07-16 10:48
*/
#include<cstdio>
#include<algorithm>
using namespace std;int R,n,stone[1005];int main()
{freopen("salu.in","r",stdin);freopen("salu.out","w",stdout);while(scanf("%d%d",&R,&n)!=0){if(R==-1 && n==-1) break;for(int i=1;i<=n;i++){scanf("%d",&stone[i]);}sort(stone+1,stone+1+n); //排序int ans=0,l=1,r=1;while(r<=n && l<=n){while(stone[l]+R>=stone[r] && r<=n && l<=n){r++;} //找距l点在R范围内的最远的点ans++; //已标记一个点r--; //因为上一个while已经将r加到了R范围内最后一个点的下一个点,因此r--while(stone[r]+R>=stone[l] && r<=n && l<=n){l++;} //找距r点在R范围内最远的点,下一次从最远点的下一个点遍历}printf("%d\n",ans);}return 0;
}

POJ - 3069 Saruman's Army 萨鲁曼的大军 贪心 重庆一中高2018级竞赛班第三次测试 2016.7.24 Problem 2相关推荐

  1. POJ3069 萨鲁曼的大军(重庆一中高2018级信息学竞赛测验3) 解题报告

    [问题描述]      萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度.于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头. 萨鲁曼给出n块 ...

  2. POJ 3069 Saruman's Army(萨鲁曼军)

    POJ 3069 Saruman's Army(萨鲁曼军) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Saruman ...

  3. 【题解】POJ 3069 Saruman's Army(贪心)

    POJ 3069 Saruman's Army 原题 https://vjudge.net/problem/POJ-3069 白种人萨鲁曼必须带领他的军队沿着从艾辛格到圣盔谷的直线前进.为了跟踪他的部 ...

  4. POJ 3069 Saruman's Army(贪心)

    题目链接:http://poj.org/problem?id=3069 Description Saruman the White must lead his army along a straigh ...

  5. 【贪心】POJ - 3069 Saruman's Army

    题意 给n个点,从中选择若干个标记,在距离标记为r的范围内包含其他的点,最少需要几个标记,才能将所有的点包含在内 思路 贪心.先排序,从最左边的点开始找到此半径内最大的点,则此点就是第一个标记,以此类 ...

  6. 【poj 3069】萨鲁曼的大军

    [问题描述] 萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度.于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头. 萨鲁曼给出n块石头的位置 ...

  7. Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army

    [问题描述] 萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度.于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头. 萨鲁曼给出n块石头的位置 ...

  8. CQYZ Online Judge P2995 萨鲁曼的大军(c++)

    Description 萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度.于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头. 萨鲁曼给出n块 ...

  9. Saruman's Army (POJ3069)

    Saruman's Army 萨鲁曼的大军正行进在一条笔直的道路上,由于是在夜晚行军,路上的石头严重地影响了行军速度.于是萨鲁曼决定预先在道路上安装一些路灯,以便士兵们能清楚地看到所有石头. 萨鲁曼给 ...

最新文章

  1. 如何重构“箭头型”代码
  2. 【Java从0到架构师,mysql视频教程推荐
  3. python流程控制-python简单流程控制
  4. pthread 立即停止线程_线程取消(pthread_cancel)
  5. Linux下axel多线程下载
  6. 上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力
  7. 160 - 52 egis.1
  8. final的8个小细节,听说只有高手才知道!你知道几个?
  9. 大数据的乘法实现——C语言
  10. 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用
  11. 关于下载(前后端)第1部分
  12. SFB 项目经验-35-分配公网证书 For Exchange Server 2016(图解)
  13. Kettle Spoon入门教程
  14. meta—learning调研及MAML概述
  15. allegro 自定义快捷键
  16. 【PAT刷题甲级】部分笔记1065-1155~(下)
  17. OpenGL学习例程精析(3d纹理)
  18. 数位动态规划:Windy数
  19. 想分享给各位的故事【如果你想成为很厉害很厉害的人】
  20. Android百度鹰眼轨迹

热门文章

  1. 自动解魔方机器人1 [算法篇]
  2. 【数字图像处理】Python使用PIL库压缩图片大小——按比例压缩
  3. Unsupervised Question Answering by Cloze Translation 通过完形填空翻译的无监督的问答
  4. 4-9-6 tf.keras入门(附带复现cvpr论文流程与代码)
  5. 项目一_GoldenEye
  6. 递归方法实现最大公约数
  7. #define 宏的边际效应是什么
  8. 几个FFmpeg 视频参数 fps、tbr、tbn、tbc
  9. 如何让计算机桌面自动更换,怎么让电脑自动更换桌面背景
  10. 使用python计算贝尔宾团队角色测评结果