codeforce1184 C1. Heidi and the Turing Test (Easy)
The Cybermen and the Daleks have long been the Doctor’s main enemies. Everyone knows that both these species enjoy destroying everything they encounter. However, a little-known fact about them is that they both also love taking Turing tests!
Heidi designed a series of increasingly difficult tasks for them to spend their time on, which would allow the Doctor enough time to save innocent lives!
The funny part is that these tasks would be very easy for a human to solve.
The first task is as follows. There are some points on the plane. All but one of them are on the boundary of an axis-aligned square (its sides are parallel to the axes). Identify that point.
Input
The first line contains an integer n (2≤n≤10).
Each of the following 4n+1 lines contains two integers xi,yi (0≤xi,yi≤50), describing the coordinates of the next point.
It is guaranteed that there are at least n points on each side of the square and all 4n+1 points are distinct.
Output
Print two integers — the coordinates of the point that is not on the boundary of the square.
Examples
inputCopy
2
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
outputCopy
1 1
inputCopy
2
0 0
0 1
0 2
0 3
1 0
1 2
2 0
2 1
2 2
outputCopy
0 3
Hint
题意:
给出4n+1个点, 除了一个点之外其余点都在一个正方形的边界上, 找出这个点
题解:
构造 + 判断即可
经验小结:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef long long LL;
const int inf = 1<<30;
const LL maxn = 510;
int N;
int x[maxn], y[maxn];
bool judge(int t){
int by = inf, ty = -inf, lx = inf, rx = -inf;
for(int i = 1; i <= N; ++i)
if(i != t){
by = min(by, y[i]);
ty = max(ty, y[i]);
lx = min(lx, x[i]);
rx = max(rx, x[i]);
}
bool flag = true;
for(int i = 1; i <= N; ++i)
if(i != t){
if(x[i]!=lx && x[i]!=rx && y[i]!=by && y[i]!=ty){
flag = false;
break;
}
}
if(flag && ty-by==rx-lx) return true;
else return false;
}
int main()
{
cin >> N;
N = 4*N+1;
for(int i = 1; i <= N; ++i)
cin >> x[i] >> y[i];
for(int i = 1; i <= N; ++i){
if(judge(i)){
cout << x[i] << " " << y[i] << endl;
break;
}
}
return 0;
}
/*
2
0 0
1 1
0 1
0 2
1 0
1 2
2 0
2 1
2 2
*/