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;
}

 

 

 

,

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;
}

 

 

 

    原文作者:qscqesze
    原文地址: https://www.cnblogs.com/qscqesze/p/4545553.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞