牛客小白月赛18 D.Forsaken喜欢正方形(枚举判断)

链接: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)

输出描述:

按题面给定输出。

这个题目当时做的时候就觉得是一个依此判断是不是可行,由于当时第一时间没什么思路,就去写我们网络编程去了(每次都是上着实验课做题,杨老师sorry~)

但是后续给出的题解以及别人过的代码来看,当时应该还是有很多没想到的东西

对于第一种情况,只需要会判断4个点能否构成正方形即可。 

对于第二种情况,只需要枚举四个点,然后依次判断移动后能否构成正方形。 

前两种都不行就是第三种

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int x[5],y[5],v[50];
int xa[4] = {0, 0, -1, 1};
int ya[4] = {1, -1, 0, 0};
int check()
{
    int w = 0;
    for (int i=1; i<=4; i++)
        for (int j=i+1; j<=4; j++)
            v[++w] = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
    if (v[1]==v[6]&&v[2]==v[5]&&v[3]==v[4])
        return 1;
    return 0;
}
int main()
{
    int i, j;
    for(i=1; i<=4; i++)
        cin >> x[i] >> y[i];
    if (check())
    {
        printf("wen\n");
        return 0;
    }
    else
    {
        for (i=1; i<=4; i++)
        {
            for (j=0; j<4; j++)
            {
                x[i]+=xa[j];
                y[i] += ya[j];
                if (check())
                {
                    printf("hai xing\n");
                    return 0;
                }
                x[i]-=xa[j];
                y[i]-= ya[j];
            }
        }
    }
    printf("wo jue de bu xing\n");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值