• cdoj 93 King's Sanctuary 傻逼几何题


    King's Sanctuary

    Time Limit: 20 Sec  Memory Limit: 256 MB

    题目连接

    http://acm.uestc.edu.cn/#/problem/show/93

    Description


    The king found his adherents were building four sanctuaries for him. He is interested about the positions of the sanctuaries and wants to know whether they would form a parallelogram, rectangle, diamond, square or anything else.

    Input

    The first line of the input is T(1≤T≤1000), which stands for the number of test cases you need to solve. Each case contains four lines, and there are two integers in each line, which shows the position of the four sanctuaries. And it is guaranteed that the positions are given clockwise. And it is always a convex polygon, if you connect the four points clockwise.

    Output

    For every test case, you should output Case #t: first, where t indicates the case number and counts from 1, then output the type of the quadrilateral.

    Sample Input

    5
    0 0
    1 1
    2 1
    1 0
    0 0
    0 1
    2 1
    2 0
    0 0
    2 1
    4 0
    2 -1
    0 0
    0 1
    1 1
    1 0
    0 0
    1 1
    2 1
    3 0

    Sample Output

    Case #1: Parallelogram
    Case #2: Rectangle
    Case #3: Diamond
    Case #4: Square
    Case #5: Others

    HINT

    题意

    题解:

    给你4个点,让你判断是正方形,还是菱形,还是矩形,还是平行四边形

    乱搞就好了 = =

    代码:

    #include <iostream>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    
    using namespace std;
    
    int T, x[4], y[4];
    
    bool Parallelogram()
    {
        int a = (y[1] - y[0]) * (x[3] - x[2]);
        int b = (x[1] - x[0]) * (y[3] - y[2]);
        if(a != b) return false;
        a = (x[2] - x[1]) * (y[3] - y[0]);
        b = (x[3] - x[0]) * (y[2] - y[1]);
        return a == b;
    }
    
    bool Rectangle()
    {
        int a = (x[0] - x[2]) * (x[0] - x[2]) + (y[0] - y[2]) * (y[0] - y[2]);
        int b = (x[1] - x[3]) * (x[1] - x[3]) + (y[1] - y[3]) * (y[1] - y[3]);
        return a == b;
    }
    
    bool Diamond()
    {
        int a = (y[0] - y[2]) * (y[1] - y[3]);
        int b = (x[1] - x[3]) * (x[0] - x[2]);
        return a == -b;
    }
    
    int main()
    {
        scanf("%d", &T);
        for(int ca = 1; ca <= T; ca++)
        {
            int i, j;
            for(i = 0; i < 4; i++)
            {
                scanf("%d %d", &x[i], &y[i]);
            }
            printf("Case #%d: ", ca);
            for(i = 0; i < 4; i++)
            {
                for(j = i + 1; j < 4; j++)
                {
                    if(x[i] == x[j] && y[i] == y[j])
                        break;
                }
                if(j != 4) break;
            }
            if(i != 4) puts("Others");
            else
            {
                bool tag, tag1;
                tag = Parallelogram();
                if(tag == false) {puts("Others");}
                else
                {
                    tag = Rectangle();
                    tag1 = Diamond();
                    if(tag == false && tag1 == false) puts("Parallelogram");
                    else if(tag == true && tag1 == true) puts("Square");
                    else if(tag == true) puts("Rectangle");
                    else if(tag1 == true) puts("Diamond");
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    Android EventBus解析
    wpf image 指定Stretch="None" 不拉伸的时候,仍然拉伸的解决办法
    当父级绑定了DataContext之内的数据源时,子级想重新绑回DataContext
    wpf 千位符 格式化字符串
    wpf 如果列表加载超多数据变的卡顿时,使用VirtualizingStackPanel
    wpf DataTemplate ColumnDefinition width equal
    wpf 自定义控件展开popup,点击popup之外的部分,popup不能自动关闭
    wpf listBox的item,滚动条拖到低部,底部内容不能完全显示的问题
    wpf 在Popup内的TextBox 输入法 不能切换
    wpf image blur
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4545553.html
Copyright © 2020-2023  润新知