鏈接:https://ac.nowcoder.com/acm/contest/1221/D
來源:牛客網
目描述
Forsaken特別喜歡正方形,現在他有二維平面的四個整點。如果四個整點可以直接形成一個正方形,輸出"wen"。如果可以通過對其中一個點進行一次輕微的調整使得四個整點形成一個正方形,輸出“hai xing”,輕微的調整是指如果當前整點座標爲(x,y)(x,y)(x,y),那麼我們可以把這個點變成(x+1,y),(x−1,y),(x,y+1),(x,y−1)(x+1,y),(x-1,y),(x,y+1),(x,y-1)(x+1,y),(x−1,y),(x,y+1),(x,y−1)中的一種。否則如果都不行,輸出“wo jue de bu xing”。
輸入描述:
輸入有四行,每行一個二維座標(x,y)(x,y)(x,y)
輸出描述:
按題面給定輸出。
示例1
輸入
0 0 0 1 1 1 1 0
輸出
wen
備註:
0≤x,y≤1000 \leq x,y \leq 1000≤x,y≤100
思路:我先寫個判斷函數判斷在是否能合成正方形判斷條件是四條邊和兩個對角線是否值相等,然後先判斷一下是否正確再用枚舉的方法枚舉每個點和四個方向即可
#include<bits/stdc++.h>
using namespace std;
const int maxn = 109;
struct node{
int x, y;
}pp[maxn];
int rr[4][2] = {1,0,0,1,-1,0,0,-1};
bool check() {
vector<int>A;
for(int i = 1;i <= 4;++i) {
for(int j = i+1;j <= 4;++j) {
A.push_back((pp[i].x-pp[j].x)*(pp[i].x-pp[j].x) + (pp[i].y-pp[j].y)*(pp[i].y-pp[j].y));
}
}
sort(A.begin(), A.end());
if(A[0] == A[3] && A[4] == A[5]) {
return true;
}
else{
return false;
}
}
int main() {
for(int i = 1;i <= 4;++i) {
scanf("%d%d", &pp[i].x, &pp[i].y);
}
if(check()) {
printf("wen\n");return 0;
}
else{
for(int i = 1;i <= 4;++i) {
for(int j = 0;j < 4;++j) {
pp[i].x = pp[i].x + rr[j][0];
pp[i].y = pp[i].y + rr[j][1];
if(check()) {
printf("hai xing\n");return 0;
}
pp[i].x = pp[i].x - rr[j][0];
pp[i].y = pp[i].y - rr[j][1];
}
}
}
printf("wo jue de bu xing\n");
return 0;
}