UVa 10585 - Center of symmetry
2013-07-18 21:48
1101 查看
给出若干个点的坐标,问是否存在一个点,这个点是所有点的中点
我的思路:排序+二分查找(详见代码)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef struct point
{
double x;
double y;
} point;
point a[10010];
int cmp(point a,point b)//排序函数
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int cmp2(point a,point b)//比较函数
{
if(fabs(a.x-b.x)<1e-8)
{
if(fabs(a.y-b.y)<1e-8)return 0;
else if(a.y<b.y)return -1;
else if(a.y>b.y)return 1;
}
else if(a.x<b.x)return -1;
else return 1;
}
int f(point p,int n)//二分查找
{
int L=0,R=n-1,mid=(L+R)/2;
while(L<R)
{
if(cmp2(p,a[mid])>0)L=mid+1;
else R=mid;
mid=(L+R)/2;
}
if(cmp2(p,a[mid])==0)return 1;
else return 0;
}
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
double x=0,y=0;
for(int i=0; i<n; i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
x+=a[i].x;
y+=a[i].y;
}
x/=n;
y/=n;
sort(a,a+n,cmp);
int flag=0;
for(int i=0; i<n; i++)
{
point k;
k.x=x+(x-a[i].x);
k.y=y+(y-a[i].y);
if(!f(k,n))
{
flag=1;
break;
}
}
if(flag)puts("no");
else puts("yes");
}
return 0;
}
相关文章推荐
- UVA 10585 - Center of symmetry
- uva 10585 - Center of symmetry(水)
- UVA 10585 - Center of Symmetry
- Uva 10585 - Center of symmetry
- UVA 10585 Center of symmetry
- UVA 10002 Center of Masses
- UVA 10002 Center of Masses
- UVA 10002 Center of Masses(凸包)
- pku 2526(Center of symmetry)
- UVA 10002 Center of Masses【求凸包重心】
- UVA_10002_Center of Masses
- POJ 1859 The Perfect Symmetry && POJ2526 Center of symmetry(思维题)
- poj 2526 Center of symmetry
- UVA10585-Center of symmetry
- UVa 10002 Center of Masses(Andrew或Graham_scan)
- UVa 10002 Center of Masses (凸包重心)
- uva10002 Center of Masses
- POJ 2526 Center of symmetry(计算几何--对称点)
- poj 2526 Center of symmetry 哈希查找
- UVa 10002 - Center of Masses