• 给定四个点,判断能否组成正方形


    求出任意两点之间的六条边后,从小到大排序。

    如果前四条边相等,后两条边相等,且后两条边的长度大于前四条边边,则可以组成正方形。

    例题: 牛客  Forsaken喜欢正方形

    题目描述 

            Forsaken特别喜欢正方形,现在他有二维平面的四个整点。如果四个整点可以直接形成一个正方形,输出"wen"。如果可以通过对其中一个点进行一次轻微的调整使得四个整点形成一个正方形,输出“hai xing”,轻微的调整是指如果当前整点坐标为(x,y)(x,y),那么我们可以把这个点变成(x+1,y),(x-1,y),(x,y+1),(x,y-1)(x+1,y),(x1,y),(x,y+1),(x,y1)中的一种。否则如果都不行,输出“wo jue de bu xing”。

    输入描述:

    输入有四行,每行一个二维坐标(x,y)(x,y)

    输出描述:

    按题面给定输出。
    示例1

    输入

    复制
    0 0
    0 1
    1 1
    1 0

    输出

    复制
    wen

    备注:

    0 <= x,y <= 100





    AC代码:
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <math.h>
     5 #include <algorithm>
     6 #include <queue>
     7 #include <stack>
     8 #include <deque>
     9 #include <iostream>
    10 using namespace std;
    11 typedef long long LL;
    12 const int N = 30000009;
    13  
    14 int x[5], y[5], x2[5], y2[5];
    15 int way[] = {0, 0, 0, 1, 0, -1, 1, 0, -1, 0};
    16 int edge[10];
    17  
    18 int dis(int a1, int b1, int a2, int b2)
    19 {
    20     return (a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1);
    21 }
    22  
    23 int main()
    24 {
    25     int i, j, n, t;
    26     int a, b, c, d, cnt, flag = 0;
    27     for (i = 1; i <= 4; i++)
    28     {
    29         scanf("%d%d", &x2[i], &y2[i]);
    30     }
    31  
    32     for (a = 0; a < 10; a += 2)
    33     {
    34         for (b = 0; b < 10; b += 2)
    35         {
    36             for (c = 0; c < 10; c += 2)
    37             {
    38                 for (d = 0; d < 10; d += 2)
    39                 {
    40                     x[1] = x2[1] + way[a];
    41                     y[1] = y2[1] + way[a + 1];
    42  
    43                     x[2] = x2[2] + way[b];
    44                     y[2] = y2[2] + way[b + 1];
    45  
    46                     x[3] = x2[3] + way[c];
    47                     y[3] = y2[3] + way[c + 1];
    48  
    49                     x[4] = x2[4] + way[d];
    50                     y[4] = y2[4] + way[d + 1];
    51  
    52                     cnt = 1;
    53                     for (i = 1; i <= 4; i++)
    54                     {
    55                         for (j = i + 1; j <= 4; j++)
    56                         {
    57                             edge[cnt++] = dis(x[i], y[i], x[j], y[j]);
    58                         }
    59                     }
    60                     sort(edge + 1, edge + 1 + 6);
    61  
    62                     if (edge[1] == edge[2] && edge[2] == edge[3] && edge[3] == edge[4] && edge[5] == edge[6] && edge[1] < edge[5])
    63                     {
    64  
    65                         if (a == 0 && b == 0 && c == 0 && d == 0)
    66                         {
    67                             printf("wen
    ");
    68                             return 0;
    69                         }
    70                         else
    71                         {
    72                             printf("hai xing
    ");
    73                             return 0;
    74                         }
    75                     }
    76                 }
    77             }
    78         }
    79     }
    80  
    81     printf("wo jue de bu xing
    ");
    82  
    83     return 0;
    84 }
    View Code
     
  • 相关阅读:
    常用DOS命令大全2
    常用DOS命令大全1
    2020年3月13日Java面试记录
    MySQL Transaction--Sprint中访问只读从库的设置
    MySQL Transaction--TPS计算规则
    MySQL Inport--导入数据
    MySQL Export--导出数据
    MySQL--InnoDB并发线程控制
    MySQL--线程池(Thread Pool)
    MySQL 5.7--复制延迟监控
  • 原文地址:https://www.cnblogs.com/daybreaking/p/11749012.html
Copyright © 2020-2023  润新知