poj1328
来源:互联网 发布:爱肯拿天峻授权淘宝店 编辑:程序博客网 时间:2024/05/21 20:46
这题使用贪心的思想,对岛屿在x轴上覆盖位置的靠左边的坐标排序,然后便是尽量少放置雷达,我的解法是把点按横坐标排序,然后把每个点的雷达尽量往右放,然后每放一个雷达都要保证雷达左面的岛都被雷达所覆盖。所以我们可以按一个点靠右放完雷达后,再根据后面的在雷达位置左面的点,把雷达向左移。一个雷达经过了移的过程,就一定是能覆盖左面的岛。
代码如下:
#include<iostream>#include<cmath>using namespace std;const int MAXN = 10002;struct Island{double l_min,l_max;}area_on_beach[MAXN];int cmp(const void *a,const void *b){return (*(Island *)a).l_min <= (*(Island *)b).l_max ? 1:-1;}int main(){double n(0),d(0);bool flag;int count(1);while(cin>>n>>d){if(n==0&&d==0)break;flag = true;for(int i=0;i<n;i++){double x_island,y_island;cin>>x_island>>y_island;if(y_island<=d){area_on_beach[i].l_min=sqrt(d*d-y_island*y_island)+x_island;area_on_beach[i].l_max=x_island-sqrt(d*d-y_island*y_island);}else{flag=false;break;}}if(flag==false){cout<<-1<<endl;continue;}qsort(area_on_beach,n,sizeof(Island),cmp);int amount = 1;double buff = area_on_beach[0].l_max;for(int i=1;i<n;i++){if(area_on_beach[i].l_min>buff){amount++;buff=area_on_beach[i].l_max;}else{if(area_on_beach[i].l_max<buff)buff=area_on_beach[i].l_max;}}cout<<"Case "<<count<<": "<<amount<<endl;count++;}return 0;}
- POJ1328
- poj1328
- POJ1328
- poj1328
- POJ1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- POJ1328
- POJ1328
- POJ1328
- poj1328
- POJ1328
- UITableView高度自適應
- poj 3264
- 使用cookie(需要引入jquery.cookie.js)
- 第一个简单的hibernate程序
- 穷举—比较基础
- poj1328
- 类似错误 webapps\CKFinderJava does not exist or is not a readable directory
- Python的内存泄漏及gc模块的使用
- GDAL 支持的图像格式
- 数据库备份和还原过程
- 编程器固件、uboot、fullflash
- android的语言切换
- 常用控件 02 布局 Layout
- 关于开发人员数据库权限配置以及规范数据库升级流程