zoukankan      html  css  js  c++  java
  • UVA

    The figure shown on the left is left-right symmetric as it is possible to fold the sheet of paper along a vertical line, drawn as a dashed line, and to cut the figure into two identical halves. The figure on the right is not left-right symmetric as it is impossible to find such a vertical line.

    epsfbox{p3226.eps}

    Write a program that determines whether a figure, drawn with dots, is left-right symmetric or not. The dots are all distinct.

    Input 

    The input consists of T test cases. The number of test cases T is given in the first line of the input file. The first line of each test case contains an integer N , where N ( 1$ le$N$ le$1, 000) is the number of dots in a figure. Each of the following N lines contains the x-coordinate and y-coordinate of a dot. Both x-coordinates and y-coordinates are integers between -10,000 and 10,000, both inclusive.

    Output 

    Print exactly one line for each test case. The line should contain `YES' if the figure is left-right symmetric. and `NO', otherwise.

    The following shows sample input and output for three test cases.

    Sample Input 

    3                                            
    5                                            
    -2 5                                         
    0 0 
    6 5 
    4 0 
    2 3 
    4 
    2 3 
    0 4 
    4 0 
    0 0 
    4 
    5 14 
    6 10
    5 10 
    6 14
    

    Sample Output 

    YES 
    NO 
    YES
    
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    struct point
    {
        int x;
        int y;
    
        bool operator < (const point &b) const
        {
            int x1 = this->x;
            int y1 = this->y;
            int x2 = b.x;
            int y2 = b.y;
            if(y1 != y2)
                return y1 < y2;
            else
                return x1 < x2;
        }
    
         bool operator == (const point &b) const
         {
             if(x == b.x  &&  y==b.y)
                return true;
             else
                return false;
         }
    };
    
    int main()
    {
        int T;
        cin >> T;
        while(T--)
        {
            int N;
            cin >> N;
            vector<point> box;
            for(int i = 0; i<N; i++)
            {
                point temp;
                cin >> temp.x >> temp.y;
                box.push_back(temp);
            }
            sort(box.begin(), box.end());
    
            double center;
            bool flag;
            for(auto i = box.begin(); i!=box.end() && (*i).y==box[0].y; i++)
            {
                center = ( (*i).x + box[0].x ) / 2.0;
                flag = true;
                for(auto i = box.begin(); i!=box.end(); i++)
                {
                    point M;
                    M.x = (2.0 * center) - (*i).x;
                    M.y = (*i).y;
                    if(find(box.begin(), box.end(), M)==box.end())
                    {
                        flag = false;
                        break;
                    }
                }
                if(flag==true)
                {
                    cout << "YES" << endl;
                    break;
                }
            }
            if(flag == false)
                cout << "NO" << endl;
        }
    
    
        return 0;
    }


  • 相关阅读:
    洛谷 P3366 【模板】最小生成树
    libfreenect
    openni2 和opencv读取数据
    kinect数据读取
    kinect for windows sdk
    caffe android lib
    Hlsl2glsl
    手势识别半自动标注结果视频
    CLM
    10位算法大师
  • 原文地址:https://www.cnblogs.com/kunsoft/p/5312793.html
Copyright © 2011-2022 走看看