zoukankan      html  css  js  c++  java
  • Symmetry 解题心得

    ---恢复内容开始---

    Description

    Download as PDF
     

    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


    分析:我的思路是输入的同时,记下某一行的x的最大值和最小值,通过这一行的对称轴,再默认已它为所有行的对称轴去判断是否适用其他行,没有冲突即找到对称轴。


    我的代码
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    
    struct point
    {
        double x, y;
    
        point(int x1 = 0, int y1 = 0) :x(x1), y(y1)
        {}
    
        void mirror()
        {
            x = -x;
        }
    
        bool operator <(const point &b)const
        {
            if (x == b.x){
                return  (y< b.y);
            }
            else{
                return x < b.x;
            }
        }
    
    }p[1010];
    
    
    map<point, bool> m;
    
    bool findmirror(point & p1, double x)
    {
        point tempp;
        tempp.x = 2 * x - p1.x;
        tempp.y = p1.y;
        //auto result =m.find(tempp);
        if (m[tempp]){
            return true;
        }
        return false;
    }
    
    int Max = -15000;
    int Min = 15000;
    
    
    int main()
    {
        int t;        
        cin >> t;
        while (t--){
            m.clear();
            bool flag = true;
            Max = -15000;
            Min = 15000;
            int n;
            cin >> n;
            
            //输入
            for (int i = 0; i < n; i++){
                cin >> p[i].x >> p[i].y;
                m[p[i]] = true;
                if (p[i].y == p[0].y){
                    if (Max < p[i].x)                Max = p[i].x;
                    if (Min>p[i].x)                Min = p[i].x;
                }
            }
    
        //判断
                double mir = (double)(Max + Min) / 2;
                for (int i = 0; i < n; i++){
                    if (  !findmirror(p[i], mir)      ){
                        flag = false;
                        break;
                    }
                }
                if (flag == true)
                    puts("YES");
                else
                    puts("NO");
            }
            
    
    
    
        return 0;
    }
    View Code
  • 相关阅读:
    vue 路由的实现 hash模式 和 history模式
    标准规范
    知识产权、项目收尾
    合同法、著作权、实施条例
    招投标法、政府采购法
    项目成熟度模型、量化项目管理
    信息系统综合测试与管理
    信息系统安全管理
    Spring Boot 6. 与数据访问
    Spring Boot 5. 与Docker
  • 原文地址:https://www.cnblogs.com/shawn-ji/p/4656817.html
Copyright © 2011-2022 走看看