hihocoder收割机14第四题
来源:互联网 发布:绘制路线图软件 编辑:程序博客网 时间:2024/04/28 11:57
时间限制:20000ms
单点时限:2000ms
内存限制:256MB
描述
主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”。
现在战场上有N名敌对英雄,他们的位置分别为(Xi, Yi),而剑刃风暴的伤害范围是一个半径为R的圆形,尤涅若可以选择一个坐标作为剑刃风暴的中心,所有处于这个圆形范围内的英雄都会受到剑刃风暴的伤害。
现在尤涅若想要知道,他的剑刃风暴最多可以同时伤害到多少敌对英雄。
输入
第一行为两个整数N和R,分别敌对英雄的数量以及剑刃风暴的半径。
接下来的N行,每行两个整数Xi和Yi,描述一个英雄的坐标。
对于30%的数据,满足1<=N<=10
对于60%的数据,满足1<=N<=100
对于100%的数据,满足1<=N<=2000, 0<=Xi, Yi<=108, 1<=R<=108,可能有两名英雄的坐标是相同的。
输出
输出一行Ans,表示尤涅若的剑刃风暴最多能够伤害到的英雄数量。
样例输入
10 2
0 10
0 10
9 10
1 2
4 5
8 8
8 4
4 2
7 7
0 7
样例输出
3
单点时限:2000ms
内存限制:256MB
描述
主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”。
现在战场上有N名敌对英雄,他们的位置分别为(Xi, Yi),而剑刃风暴的伤害范围是一个半径为R的圆形,尤涅若可以选择一个坐标作为剑刃风暴的中心,所有处于这个圆形范围内的英雄都会受到剑刃风暴的伤害。
现在尤涅若想要知道,他的剑刃风暴最多可以同时伤害到多少敌对英雄。
输入
第一行为两个整数N和R,分别敌对英雄的数量以及剑刃风暴的半径。
接下来的N行,每行两个整数Xi和Yi,描述一个英雄的坐标。
对于30%的数据,满足1<=N<=10
对于60%的数据,满足1<=N<=100
对于100%的数据,满足1<=N<=2000, 0<=Xi, Yi<=108, 1<=R<=108,可能有两名英雄的坐标是相同的。
输出
输出一行Ans,表示尤涅若的剑刃风暴最多能够伤害到的英雄数量。
样例输入
10 2
0 10
0 10
9 10
1 2
4 5
8 8
8 4
4 2
7 7
0 7
样例输出
3
计算几何的题目,本来想着暴力枚举每两个点,可是所给的数据量有点大,会超时的。现在可以枚举每点,以每个点位圆心做圆,看对于我所枚举的这个点,其圆弧被交了多少次,然后记录对于每个圆来说其一段圆弧被覆盖的最大次数,然后求出总体最大次数。
#include<iostream>#include<fstream>#include<iomanip>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#include<set>#include<map>#include<queue>#include<stack>#include<string>#include<vector>#include<sstream>#include<ctime>#include<cassert>#define LL long long#define eps 1e-8#define inf 999999.0#define zero(a) abs(a)<eps#define N 20#define MOD 100000007#define pi acos(-1.0)using namespace std;double R;struct Point{ double x,y; Point(){} Point(double tx,double ty){x=tx;y=ty;}}p[2010];struct Node{ double angle; bool in;}arc[4000000*2+10];int n,cnt;double dist(Point p1,Point p2){ return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}bool cmp(Node n1,Node n2){ return n1.angle!=n2.angle?n1.angle<n2.angle:n1.in>n2.in;}void MaxCircleCover(){ int ans=1; for(int i=0;i<n;i++){ //对于每个圆来说。 int cnt=0; for(int j=0;j<n;j++){ if(i==j) continue; if(dist(p[i],p[j])>R*2) continue;//如果相交记录其相交的两端,以极角的形式记录。 double angle=atan2(p[i].y-p[j].y,p[i].x-p[j].x); double phi=acos(dist(p[i],p[j])/(R*2)); arc[cnt].angle=angle-phi;arc[cnt++].in=true; arc[cnt].angle=angle+phi;arc[cnt++].in=false; } sort(arc,arc+cnt,cmp);//对极角排序 int tmp=1; for(int i=0;i<cnt;i++){ if(arc[i].in) tmp++;//遇见起点就加 else tmp--;//遇见终点就减 ans=max(ans,tmp); } } printf("%d\n",ans);}int main(){ cin >> n >> R; for(int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); MaxCircleCover(); return 0;}
0 0
- hihocoder收割机14第四题
- hihoCoder挑战赛14A题 1223
- hihoCoder挑战赛14-1223
- hihoCoder挑战赛14-1224
- hihoCoder每周一题
- hihocoder #1258 签到题
- hihocoder:
- hihoCoder
- Hihocoder
- hihocoder
- hihocoder
- hihocoder
- hihocoder
- hihocoder
- HihoCoder
- HihoCoder
- HihoCoder
- HihoCoder
- 紫书章六例题13 古代象形文字 UVA 1103(3次dfs,好题)
- Maven经验分享(八)maven去除jar报依赖
- Java调用Python并传递参数(爬虫8)
- spring mvc转发和重定向到根index.jsp
- Mysql----同步,克隆数据库表
- hihocoder收割机14第四题
- spring同时集成mybatis和ibatis
- 如何修改java过滤器链
- Unity3d 一个优秀的程序必备的几种设计模式
- pom.xml文件中scope添加以后会报错
- 笔记(4月16日)
- quartz监控日志(一)
- quartz监控日志(二)添加监听器
- 怎样在EOS中配置与数据库的自动重连