POJ-3069-Saruman's Army
来源:互联网 发布:java编写迷宫小游戏 编辑:程序博客网 时间:2024/05/22 17:47
本题大意为:
在一个数轴上给定n个点的横坐标,每个点能以R为半径作圆覆盖周围,问最少需要多少个点能使这些点全部被覆盖住!
本题思路:
这个题,首先需要对所给的数据进行排序,然后才能继续操作!
以当前第一个未被覆盖的点设为begin,以该点作圆,向后寻找,直到找到第一个不能被覆盖的点,设为cnt,此时取其前面一个点的坐标即 cnt-1 ,然后就以此点zhong为中心作圆,继续向后查找,同样的直到找到第一个未被覆盖的点,同时将该点的坐标赋给begin,点数ans加1(因为zhong左边的已经确定了,所以只需要处理右边的就行了!)一直酱紫重复找,直到cnt大于n即可!
代码如下:(代码里关键步骤也是有注释的!)
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ int R,n; int r[5204]; while(scanf("%d%d",&R,&n)!=EOF) { if(R==-1&&n==-1) break; for(int i=0; i<n; i++) scanf("%d",&r[i]); sort(r,r+n); int ans=0; int cnt=0; while(cnt<n) { int begin=r[cnt++];//取当前灯! while(cnt<n&&r[cnt]<=begin+R) cnt++;//一直向里面找,找到能将前面的灯都给照亮的最远的灯! int zhong=r[cnt-1];//找到中心点! while(cnt<n&&r[cnt]<=zhong+R) cnt++;//找出不超出R范围的最远距离! ans++;//超出范围了表示就有一点已经无法再继续照亮更远的灯了,所以ans就加加了! } printf("%d\n",ans); } return 0;}
0 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
- 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
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army
- poj 3069 Saruman's Army
- POJ Saruman's Army 3069
- POJ 3069 Saruman's Army
- POJ-3069 Saruman's Army
- POJ 3069 Saruman's Army
- POJ 3069 Saruman's Army
- Storyboard
- 暑假安排:
- leetcode: Add Binary
- android界面设计之布局
- ASP.NET MVC4 入门(三)——添加一个视图
- POJ-3069-Saruman's Army
- Cobbler全自动批量安装部署Linux系统
- iOS Dev (71) ccTouchBegan 无响应的可能原因
- QT Q_PROPERTY宏介绍
- C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
- iOS Dev (72) ccTouchBegan 返回值 BOOL 的含义
- MASM 16位汇编程序几种典型的格式
- ASP.NET MVC4 入门(四)——添加一个模型
- Linux CentOS 下安装谷歌浏览器(Chromium)