hdu 5563 Clarke and five-pointed star (枚举)

题意:给出5个点的坐标,问这5个点是否刚好是一个五角星的顶点。

思路:

dfs枚举5个点的顺序。

判断5条邻边相等,5条对角线相等。若均满足则是,否则不是。

附:为什么要判断5条对角线也相等才行呢?

如图,一个正方形上面一个正三角形,同样满足 5条邻边相等,但不满足5条对角线相等。

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<vector>
 8 #include<queue>
 9 #include<map>
10 #include<set>
11 #define eps 10e-6
12
13 using namespace std;
14
15 double x[8],y[8];
16 bool vis[8];
17 int order[6];
18 double dis[12];
19
20 double cal(int i,int j)
21 {
22     return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
23 }
24
25 bool isok()
26 {
27     for(int i=0;i<4;i++)
28         dis[i] = cal(order[i+1],order[i+2]);
29     dis[4] = cal(order[5],order[1]);
30     int flag1 = 1;
31     for(int i=0;i<4;i++)
32     {
33         if(fabs(dis[i]-dis[4])>eps)
34         {
35             flag1 = 0;
36             break;
37         }
38     }
39
40     dis[5] = cal(order[1],order[3]);
41     dis[6] = cal(order[1],order[4]);
42     dis[7] = cal(order[2],order[4]);
43     dis[8] = cal(order[2],order[5]);
44     dis[9] = cal(order[3],order[5]);
45     int flag2 = 1;
46     for(int i=5;i<9;i++)
47     {
48         if(fabs(dis[i]-dis[9])>eps)
49         {
50             flag2 = 0;
51             break;
52         }
53     }
54     return flag1 && flag2;
55 }
56
57 bool dfs(int pos)
58 {
59     if(pos == 6)
60     {
61         if(isok())
62             return true;
63     }
64     for(int i=0;i<5;i++)
65     {
66         if(!vis[i])
67         {
68             order[pos] = i;
69             vis[i] = true;
70             if(dfs(pos+1)) return true;
71             vis[i] = false;
72         }
73     }
74     return false;
75 }
76
77 int main()
78 {
79     int T;
80     scanf("%d",&T);
81     while(T--)
82     {
83         memset(vis,0,sizeof(vis));
84         for(int i=0;i<5;i++)
85             scanf("%lf%lf",&x[i],&y[i]);
86         if(dfs(1)) puts("Yes");
87         else puts("No");
88     }
89     return 0;
90 }

时间: 2024-08-01 22:47:54

hdu 5563 Clarke and five-pointed star (枚举)的相关文章

hdu 4937 Lucky Number ( 进制转换+枚举 )

题意: 有一个数n,问有多少个进制x(基数)使得n转换为x进制后的数字中只有3.4.5.6四个数. 算法: 对于只有一位数的情况,显然3.4.5.6都应该输出-1. 如果有2位数,假设这2位中高位为a,低位为b,进制为base,则 n = a * base + b,解一元一次方程即可. 如果有3位数,假设这3为从高到低分别为a.b.c,进制为base,则 n = a * base * base + b * base + c,即一元二次方程即可. 如果位数>= 4,可以暴力枚举进制数.base>

hdu 4968 Improving the GPA (水 暴力枚举)

题目链接 题意:给平均成绩和科目数,求可能的最大学分和最小学分. 分析: 枚举一下,可以达到复杂度可以达到10^4,我下面的代码是10^5,可以把最后一个循环撤掉. 刚开始以为枚举档次的话是5^10,但是这个又不要求顺序,所以只是枚举个数就行了.. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath&g

HDU 5616 Jam&#39;s balance(暴力枚举子集)

题目链接:点击打开链接 题意:有一个没有游标的天平,和n个秤砣,m个询问, 每次一个k,问可否秤出k这个重量. 秤砣可以放两边. 思路:因为n最大20, 暴力枚举子集. 因为可以放两边, 所以每次再跑一遍, 减去每个的重量, 将答案保存. 比赛的时候忘了限制边界,虽然过了终测数据, 却被人用大数据hack了(RE), 还是自己程序写的不够鲁棒, 思考的不完善. 细节参见代码: #include<cstdio> #include<cstring> #include<algori

hdu 4968 Improving the GPA(暴力枚举)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4970 Problem Description Xueba: Using the 4-Point Scale, my GPA is 4.0. In fact, the AVERAGE SCORE of Xueba is calculated by the following formula: AVERAGE SCORE = ∑(Wi * SCOREi) / ∑(Wi) 1<=i<=N where S

HDU 5024 Wang Xifeng&#39;s Little Plot (枚举 + DFS记忆化搜索)

Wang Xifeng's Little Plot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 513    Accepted Submission(s): 338 Problem Description <Dream of the Red Chamber>(also <The Story of the Stone>)

hdu 4932 Miaomiao&#39;s Geometry(暴力枚举)

Miaomiao's Geometry                                                                              Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description There are N point on X-axis . Miaomiao would like

HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle Accepts: 42 Submissions: 269 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 克拉克是一名人格分裂患者.某一天,有两个克拉克(aa和bb)在玩一个方格游戏. 这个方格是一个n*mn∗m的矩阵,每个格子里有一

HDU 4173 Party Location(计算几何,枚举)

HDU 4173 题意:已知n(n<=200)位参赛选手的住所坐标,现要邀请尽可能多的选手来参加一个party,而每个选手对于离住所超过2.5Km的party一律不去,求最多可以有多少个选手去参加party. 思路: 不妨先考虑party可能的位置,要尽可能多的邀请到选手参加,则只需考虑party所在位置在某两位住所连线的中点上或某选手住所所在位置,因为这是最大参加party选手数很有可能在的位置. 若其他位置能得到最大参加选手数,那么中点或选手住所也一定可得到.//反证法可得,试着画画就ok~

hdu 5247 找连续数【暴力枚举】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 分析:这道题是2015百度之星初赛1的2题,当时没看这道题 是队友看的,比完以后也做了一下,思路大体都是一样的,就是 暴力枚举,因为k<=1000,那么我们可以每一点x为起点跑[x,x+999] 这段区间,把每得到一段连续的子区间[x,?],则num[len]++(len=size([x,?])); 这样就可以了,最后num数组里就是对应的答案 献上代码: #include<stdio.h&