#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
} a[25];
struct data
{
int a1,a2,a3,a4;
} d[200];
int cnt,n,ans,b[25],use[25];
int cmp(node n1,node n2)
{
if(n1.x==n2.x) return n1.y<n2.y;
else return n1.x<n2.x;
}
double dis(int n1,int n2)
{
return (a[n1].x-a[n2].x)*(a[n1].x-a[n2].x)+(a[n1].y-a[n2].y)*(a[n1].y-a[n2].y);
}
int check(int z,int x,int c,int v)
{
if(a[z].x!=a[x].x||a[c].x!=a[v].x) return 0;
double t1,t2,t3,t4;
t1=dis(z,x);
t2=dis(z,c);
t3=dis(z,v);
if(t2>t1) swap(t1,t2);
if(t3>t1) swap(t1,t3);
if(t1!=t2+t3||t2!=t3) return 0;
t1=dis(x,c);
t2=dis(x,z);
t3=dis(x,v);
if(t2>t1) swap(t1,t2);
if(t3>t1) swap(t1,t3);
if(t1!=t2+t3||t2!=t3) return 0;
return 1;
}
void dfs(int now,int t)
{
if(t>ans) ans=t;
if(now==cnt)
return ;
if(use[d[now].a1]==0&&use[d[now].a2]==0&&use[d[now].a3]==0&&use[d[now].a4]==0)
{
use[d[now].a1]=1;
use[d[now].a2]=1;
use[d[now].a3]=1;
use[d[now].a4]=1;
dfs(now+1,t+4);
use[d[now].a1]=0;
use[d[now].a2]=0;
use[d[now].a3]=0;
use[d[now].a4]=0;
}
dfs(now+1,t);
}
int main()
{
int i;
while(~scanf("%d",&n))
{
if(n==-1) break;
for(i=0; i<n; i++)
scanf("%d%d",&a[i].x,&a[i].y);
if(n<=3)
{
printf("0\n");
continue;
}
cnt=0;
memset(use,0,sizeof(use));
sort(a,a+n,cmp);
for(int a1=0; a1<n; a1++)
for(int a2=a1+1; a2<n; a2++)
for(int a3=a2+1; a3<n; a3++)
for(int a4=a3+1; a4<n; a4++)
{
if(check(a1,a2,a3,a4)==1)
{
d[cnt].a1=a1;
d[cnt].a2=a2;
d[cnt].a3=a3;
d[cnt].a4=a4;
cnt++;
}
}
ans=0;
if(cnt!=0) dfs(0,0);
printf("%d\n",ans);
}
return 0;
}
hdu 4739 Zhuge Liang's Mines 搜索
最新推荐文章于 2017-09-22 10:26:34 发布