2017 ACM-ICPC GSM Base Station Identification

来源:互联网 发布:休闲皮鞋知乎 编辑:程序博客网 时间:2024/06/12 01:47

题意:

建立400个六边形,给出10个点的坐标,问点在哪个六边形内

思路:

刚开始的时候想了一堆东西发现都不怎么好

然后想可以遍历每个六边形的中心点,可以贴一个点是否在多边形内的板子

但是转念一想,六边形比较像一个圆,点又都是整数点,

试了一下离点距离小于5,2.5sqrt(3),发现都过了,数据还是太水了

晚上想了想最稳的应该是遍历400个中心点,找出离给定点距离最近的那个

#include<bits/stdc++.h>using  namespace std;const double pi=sqrt(3.0);int main(){double x,y;double xx,yy;for(int k=0;k<10;k++){scanf("%lf%lf",&xx,&yy);for(int i=-9;i<=10;i++)for(int j=-9;j<=10;j++){       x=i*5*sqrt(3.0)+2.5*pi*j;    y=7.5*j;   if( sqrt( (x-xx)*(x-xx)+(y-yy)*(y-yy))<=(2.5*pi))  //<=5也行    {   if(k!=9 )printf("[%d,%d], ",i,j);    else printf("[%d,%d]\n",i,j);    break;   }  }  }}

#include<bits/stdc++.h>using  namespace std;const double pi=sqrt(3.0);int main(){double x,y;double xx,yy,t,min;int ax,ay;for(int k=0;k<10;k++){scanf("%lf%lf",&xx,&yy);min=1e18;for(int i=-9;i<=10;i++)for(int j=-9;j<=10;j++){       x=i*5*sqrt(3.0)+2.5*pi*j;    y=7.5*j;    t=sqrt( (x-xx)*(x-xx)+(y-yy)*(y-yy));   if( t<min)    {   min=t;   ax=i;   ay=j;   }  } if(k!=9 )printf("[%d,%d], ",ax,ay);else  printf("[%d,%d]\n",ax,ay);}}


原创粉丝点击