您的位置:首页 > 其它

hdu 5365 Run(BC 50 B题)(求四边形的个数)

2015-08-09 00:18 225 查看
本来准备睡觉,结果还是忍不住想把它A了,因为已经看了题解了,

题意:就是给你一些坐标,都是整数,求一些正多边形的数目,官方题解说是地球人都知道整数坐标构不成正三角形,正五边形和正六边形的。。。然而我并不知道。。。以后才知道。。。

所以呢这道题直接暴力就可以了,求正四边形的个数,这里判断是否是正四边形用的是四条边相等,而且两条对角线相等,并且边比对角线小,我也不知道是否这样一定是正四边形(。。。)(后来网上查了一下,这样是可行的,不过还得增加一个条件,就是长的一组边是短的的根号2倍,意思就是证明有直角存在)sh说的方法我觉得也可以,就是对角线垂直相等。。。

放代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<algorithm>

using namespace std;
int solve(int a,int b,int c,int d)
{
return (a-c)*(a-c)+(b-d)*(b-d);
}
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int n,i,j,k,p;
int a[25],b[25],c[25];
while(cin >> n)
{
for(i=1; i<=n; i++)
cin >> a[i] >> b[i];
int ans = 0;
for(i=1; i<=n; i++)
for(j=i+1; j<=n; j++)
for(k=j+1; k<=n; k++)
for(p=k+1; p<=n; p++)
{
c[0] = solve(a[i],b[i],a[k],b[k]);
c[1] = solve(a[i],b[i],a[j],b[j]);
c[2] = solve(a[i],b[i],a[p],b[p]);
c[3] = solve(a[j],b[j],a[k],b[k]);
c[4] = solve(a[j],b[j],a[p],b[p]);
c[5] = solve(a[k],b[k],a[p],b[p]);
qsort(c,6,sizeof(c[0]),cmp);
if(c[0]==c[1]&&c[1]==c[2]&&c[2]==c[3]&&c[4]==c[5])
ans++;
}
cout << ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: