POJ 1328 Radar Installation
来源:互联网 发布:c语言学习网站 编辑:程序博客网 时间:2024/06/06 06:55
题意:
有n个坐标,和半径为d的雷达(具体不知道是什么,读了个大概),输入那个坐标,问在x轴上放几个雷达全部坐标都能扫到,如果有点不能被扫的,输出-1.
思路:
分别列出坐标在x轴的圆心,当然,圆心必须点的右半部分,或者点下(如果点纵坐标的绝对值大于了d,就标记为1,不用算法,直接输出-1),然后用圆心对结构体进行排序。再从前到后进行判断,如果后面的点不在圆的半径内,就说明必须得多加个雷达,于是对雷达+1,。,记录这个不满足的点,下一次直接从这个不满足的点开始。直到点走完。
代码:
#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;struct Node{ float x,y; float O;;} a[1010];float cmp(Node b,Node c){ return b.O<c.O;}float absolute(int c){ if(c<0) return -c; return c;}int main(){ int cnt=0,n,i; float d; while(scanf("%d %f",&n,&d)!=EOF) { if(n==0&&d==0) break; cnt++; int Y=0; for(i=0; i<n; i++) { scanf("%f %f",&a[i].x,&a[i].y); a[i].O=sqrt(d*d-a[i].y*a[i].y)+a[i].x; if(absolute(a[i].y)>d) Y=1; } if(Y==1) { printf("Case %d: -1\n",cnt); continue; } sort(a,a+n,cmp); int ans=1; int max=0; while(max<n) { for(i=max+1; i<n; i++) { if((a[max].O-a[i].x)*(a[max].O-a[i].x)+a[i].y*a[i].y>d*d) { ans++; break; } } max=i; } printf("Case %d: %d\n",cnt,ans); } return 0;}
0 0
- POJ 1328 "Radar Installation"
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- 1328 poj Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- POJ-1328-Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- 简单Python实例,以及打包成.exe文件
- linux -- FTP配置详解
- 流量劫持 —— 浮层登录框的隐患
- ROCK介绍
- java:SEVERE: IOException while loading persisted sessions: java.io.EOFException
- POJ 1328 Radar Installation
- 用"再生龙"Clonezilla 来克隆Linux系统
- 闻名遐迩JavaScript库总结
- angular——sportsStore项目的问题与解决
- php学习之路-http协议,防盗链
- signed char的取值范围为何最小为-128
- java通过post方式发送接收xml信息
- android利用数字证书对程序签名
- iOS 获取手机的型号,系统版本,软件名称,软件版本