CodeForces - 1184C1 (模拟+坑)

题目链接: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;
}
发布了438 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41829060/article/details/103701939