hdu 5365 判断正方形

题意:给出n个点(坐标均为整数),判断可以构成多少个正三角形、正四边形、正五边形、正六边形。

官方题解:地球人都知道整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可。假如你不是地球人,那么即使暴力枚举正三边形和稍微不那么暴力地找正五边形和正六边形也是可以通过的(反正找不到)。

......看来我不是地球人......

至于判断正方形,只要判断四边相等和一条对角线是边长的根号2倍就行了。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5
 6 const int N = 20;
 7
 8 struct Point
 9 {
10     int x, y;
11 } point[N];
12
13 int square( int x )
14 {
15     return x * x;
16 }
17
18 int dis2( int a, int b )
19 {
20     return square( point[a].x - point[b].x ) + square( point[a].y - point[b].y );
21 }
22
23 int judge( int a, int b, int c, int d )
24 {
25     int dd = dis2( a, c );
26     if ( dis2( a, b ) * 2 == dd && dis2( b, c ) * 2 == dd
27       && dis2( c, d ) * 2 == dd && dis2( d, a ) * 2 == dd ) return 1;
28     return 0;
29 }
30
31 int main ()
32 {
33     int n;
34     while ( scanf("%d", &n) != EOF )
35     {
36         for ( int i = 0; i < n; i++ )
37         {
38             scanf("%d%d", &point[i].x, &point[i].y);
39         }
40         int ans = 0;
41         for ( int i = 0; i < n; i++ )
42         {
43             for ( int j = 0; j < n; j++ )
44             {
45                 if ( i == j ) continue;
46                 for ( int k = 0; k < n; k++ )
47                 {
48                     if ( i == k || j == k ) continue;
49                     for ( int l = 0; l < n; l++ )
50                     {
51                         if ( i == l || j == l || k == l ) continue;
52                         ans += judge( i, j, k, l );
53                     }
54                 }
55             }
56         }
57         ans >>= 3;
58         printf("%d\n", ans);
59     }
60     return 0;
61 }
时间: 2024-08-06 03:09:47

hdu 5365 判断正方形的相关文章

hdu 4587 判断孤立点+割点+ 删除点之后,剩下多少连通分量

做了很久...... 题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4587 先枚举删除的第一个点,第二个点就是找割点,没有割点当然也有答案 学到的: 1.图论硬套模板不太现实,比如这道题,我能想到孤立点是特殊情况,删除孤立点,连通分支个数会减少一,但是一直处理不好,最后按缩点的做法搞了, 判断是不是孤立点的方法: 就是先用一个数组scnt[i]=j,vv[j]++  表示点i在以j为祖先的联通分支里,而且每次都让vv[j]++,就使得vv[j

hdu 5206 判断三维空间中的四个点是否构成正方形

题目描述:如标题 思路:一比一比根号二咯 1 #include <algorithm> 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 const int N = 4; 7 8 struct Node 9 { 10 int x, y, z; 11 } node[N]; 12 13 inline long long square( int k ) 14 { 15 return ( l

BestCoder Round #50 (div.2) HDU 5365 Run(简单几何)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5365 题面:(严重吐槽,看着真不舒服,还是改一下吧) Run Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 549    Accepted Submission(s): 245 Problem Description AFA is a g

hdu 5365+hdu 5355

5365 题目链接:点击打开链接 题目大意:给定一些整数点,问这些点能够组成多少个正三角形或者是正方形.正五边形.正六边形. 思路:如果仔细想一想的话,这道题目是根本不存在正三角形.正五边形.正六边形的请款的.(在纸上画图看一看,可以发现确实不行.题目输入是整数点) 所以题目变成:这些点能够组成多少个正方形.看数据范围,n<=20,坐标范围<=8. 题目瞬间简单了,暴力!暴力枚举4个点,然后判断这4个点是否能组成一个正方形.判断是否为正方形的方法很多,向量或者是距离. 我这里用的是算出4个点的

HDU 5365 Run(大水题)

大致题意: 8*8的整点格子,输入16个整点,求多少种点的集合可以组成正3,正4,5,6边形 思路:sb题啊...整点格子组成不了n !=4的所有正多边形,只要判是否能组成正方形就可以了 这里有个优美的无穷递降的证明:http://www.zhihu.com/question/25304120 而我是枚举所有点的集合判断是否能组成正多边形的蠢方法= =,先用凸包对点排个序,然后判各点距离相等和用余弦定理判个顶角相等..... //#pragma comment(linker, "/STACK:1

HDU 5365 Run

因为给出的点都是整数,都在网格上的,所以正三角形,正五边形,正六边形都是不存在的. 暴力枚举四个点,判断一下是不是正方形即可. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; int x[30],y[30]; class Coordinate { public: double xCoordinate; doub

HDU 5365 Run(暴力)

题意:给一个n和n个整数坐标问这些点能组成几个不同正三角形,正方形,正五边形,正六边形. 分析:由于坐标都是整数,使用只可能有正方形,其他都不可能,那么只要对于每四个不同的点,判断2组对边相等,两条对角线也相等,临边也相等即可. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> #pragma com

hdu 5365 (bc #50 1002 )Run

Run Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 594    Accepted Submission(s): 265 Problem Description AFA is a girl who like runing.Today,he download an app about runing .The app can record

nyoj1099 四点坐标判断正方形

题目要求是给定四个点的坐标,判断是否可以构成正方形 原题 样例输入 1 1 1 -1 1 -1 -1 1 -1 样例输出 Yes 解题思路:因为四个点是乱序,于是想判断四点构成的6边是否有四短两长(四边相等对角线相等),用set存放边长来判断是否只有两种长度,用数组判断长短边的数目其实不用set用数组排序也可以.问题的坑:1.不能忽视边为0的情况2.不能忽视底边和对角线相等的等腰梯形(三长三短的情况,应该是情况之一QAQ) #include <iostream> #include<cma