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

计算几何的题目,本来想着暴力枚举每两个点,可是所给的数据量有点大,会超时的。现在可以枚举每点,以每个点位圆心做圆,看对于我所枚举的这个点,其圆弧被交了多少次,然后记录对于每个圆来说其一段圆弧被覆盖的最大次数,然后求出总体最大次数。
#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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 妻子和她妈一起和我睡小说 孑母奸情在线播放 大嫂中文字幕129视频在线 做饭的时候儿子从后面 艳姆1-6无删减完整 儿子你不能这样啊国语 在线 在厕所里肉妈咪第一章 儿子你不能这样啊国语17分钟 不行 我们不能这样 征服护士妈全文目录34章 迷糊故意穿超短裙坐公交 大妈咪女教师全集 雪白短裙教师妈咪风雨夜 母亲轮陷公交 客厅弄醒穿花裙子午睡的妈 沙发午睡花裙子在线资源 公交上的妈咪 儿子你要高就快点你国语 花裙子母亲午睡 儿子你不能这样啊国语高清 被要求穿超级短的超短裙 穿花裙子躺在沙发上 客厅弄醒午睡的妈连接 家庭毋HH伦s线视频中字 客厅弄硬午睡的儿子短文 客厅搞午睡的母亲 弄醒客厅午睡的母亲在线播放 弄醒午睡的妈视频连接 在客厅睡的午的母亲电影 客厅午睡的母亲在线下载 韩国午睡弄醒午睡的妈 在客厅弄醒午睡的 客厅午睡的母亲穿裙子在线播放 客厅午睡的母亲自拍 客厅里硬搞午睡的母亲视频 对白搞硬沙发午睡的儿子 客厅沙发儿子碎花裙 电影客厅午睡的母亲 客厅午睡以为你是爸爸 客厅弄醒午唾的儿子 客厅搞硬午睡的儿子小说