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


  • 相关阅读:
    初始v4l2(六)-------根据虚拟驱动vivi的使用彻底分析摄像头驱动
    初识v4l2(五)-------v4l2_ioctl浅析
    初识v4l2(四)-------v4l2_open、v4l2_read、v4l2_write浅析
    初识V4L2(三)-------分析vivi.c 虚拟视频驱动
    初识V4l2(二)-------浅析video_register_device
    初识V4L2(一)
    构建根文件系统之根文件系统(三)
    构建根文件系统之构建根文件系统(二)
    构建根文件系统之根文件系统
    vscode在软件内部查看html渲染效果的插件
  • 原文地址:https://www.cnblogs.com/kunsoft/p/5312793.html
Copyright © 2020-2023  润新知