题目链接:https://vjudge.net/contest/349486#problem/B
题目:
给出n*4+1个点,要这些点组成一个正方形,判断不在正方行边上的点。
思路:
特判出现的点,判断去掉这个点之后剩下的点是否能构成一个正方形边框。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
struct Node
{
int x,y;
}cur[N];
int n;
bool pd(int rt)
{
int x1 = -1,y1 = -1,x2 = -1,y2 = -1;
for(int i=1;i<=n;i++)
if(rt != i)
{
if(x1 == -1)
{
x1 = cur[i].x; y1 = cur[i].y;
x2 = cur[i].x; y2 = cur[i].y;
}
else{
x1 = min(cur[i].x,x1);
y1 = min(cur[i].y,y1);
x2 = max(cur[i].x,x2);
y2 = max(cur[i].y,y2);
}
}
for(int i=1;i<=n;i++)
if(rt != i)
{
if(x1 == cur[i].x || x2 == cur[i].x || y1 == cur[i].y || y2 == cur[i].y) continue;
return false;
}
if(y2 - y1 > 0 && y2 - y1 == x2 - x1) return true;
return false;
}
int main(void)
{
scanf("%d",&n);
n = n*4 + 1;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&cur[i].x,&cur[i].y);
}
for(int i=1;i<=n;i++)
{
if(pd(i) == true)
{
printf("%d %d\n",cur[i].x,cur[i].y);
return 0;
}
}
return 0;
}