题意:
建立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);
}
}