給定四個點,判斷能否組成正方形

 

 

求出任意兩點之間的六條邊後,從小到大排序。

如果前四條邊相等,後兩條邊相等,且後兩條邊的長度大於前四條邊邊,則可以組成正方形。

 

 

例題: 牛客  Forsaken喜歡正方形

題目描述 

        Forsaken特別喜歡正方形,現在他有二維平面的四個整點。如果四個整點可以直接形成一個正方形,輸出"wen"。如果可以通過對其中一個點進行一次輕微的調整使得四個整點形成一個正方形,輸出“hai xing”,輕微的調整是指如果當前整點座標爲(x,y)(x,y),那麼我們可以把這個點變成(x+1,y),(x-1,y),(x,y+1),(x,y-1)(x+1,y),(x1,y),(x,y+1),(x,y1)中的一種。否則如果都不行,輸出“wo jue de bu xing”。

輸入描述:

輸入有四行,每行一個二維座標(x,y)(x,y)

輸出描述:

按題面給定輸出。
示例1

輸入

複製
0 0
0 1
1 1
1 0

輸出

複製
wen

備註:

0 <= x,y <= 100





AC代碼:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <math.h>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <deque>
 9 #include <iostream>
10 using namespace std;
11 typedef long long LL;
12 const int N = 30000009;
13  
14 int x[5], y[5], x2[5], y2[5];
15 int way[] = {0, 0, 0, 1, 0, -1, 1, 0, -1, 0};
16 int edge[10];
17  
18 int dis(int a1, int b1, int a2, int b2)
19 {
20     return (a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1);
21 }
22  
23 int main()
24 {
25     int i, j, n, t;
26     int a, b, c, d, cnt, flag = 0;
27     for (i = 1; i <= 4; i++)
28     {
29         scanf("%d%d", &x2[i], &y2[i]);
30     }
31  
32     for (a = 0; a < 10; a += 2)
33     {
34         for (b = 0; b < 10; b += 2)
35         {
36             for (c = 0; c < 10; c += 2)
37             {
38                 for (d = 0; d < 10; d += 2)
39                 {
40                     x[1] = x2[1] + way[a];
41                     y[1] = y2[1] + way[a + 1];
42  
43                     x[2] = x2[2] + way[b];
44                     y[2] = y2[2] + way[b + 1];
45  
46                     x[3] = x2[3] + way[c];
47                     y[3] = y2[3] + way[c + 1];
48  
49                     x[4] = x2[4] + way[d];
50                     y[4] = y2[4] + way[d + 1];
51  
52                     cnt = 1;
53                     for (i = 1; i <= 4; i++)
54                     {
55                         for (j = i + 1; j <= 4; j++)
56                         {
57                             edge[cnt++] = dis(x[i], y[i], x[j], y[j]);
58                         }
59                     }
60                     sort(edge + 1, edge + 1 + 6);
61  
62                     if (edge[1] == edge[2] && edge[2] == edge[3] && edge[3] == edge[4] && edge[5] == edge[6] && edge[1] < edge[5])
63                     {
64  
65                         if (a == 0 && b == 0 && c == 0 && d == 0)
66                         {
67                             printf("wen\n");
68                             return 0;
69                         }
70                         else
71                         {
72                             printf("hai xing\n");
73                             return 0;
74                         }
75                     }
76                 }
77             }
78         }
79     }
80  
81     printf("wo jue de bu xing\n");
82  
83     return 0;
84 }
View Code

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章