zoukankan      html  css  js  c++  java
  • Symmetry(对称轴存在问题)

                        Symmetry

    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

    Description

     

    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

    题意;在坐标系中给出的点中,寻找一个竖直的对称轴,让这些点关于它对称,如果它存在,输出YES,否则输出NO

    看了很多人的博客,大多数此题用STL解决,了解它会更容易,但是我不太会,所以还是介绍的是一种自己好理解的避免出现精度问题的方法(坐标*2)

     备注:

    double类型进行运算会有精度误差.
    比如
    double a=1,b=1;
    a-b可能不等于0,而是等于一个接近0的小数。所以我们认为只要a-b小于一个足够小的数(eps)的话,那么就可以认为a=b。

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    const double eps=1e-5;//1e-5:浮点数,在计算机中这么表示,在数学中是科学计数法.1e-5的意思就是1乘以10的负5次幂。就是0.000001

    int x[1010],y[1010];
    int main()
    {
      int T;
      cin>>T;
      while(T--)
    {
      int n,i,j;;
      cin>>n;

      double sum=0;

     for(i=1; i<=n; i++)
    {
      cin>>x[i]>>y[i];
      sum+=x[i];
    }
      sum/=n;

    for(i=1; i<=n; i++)
    {
      for(j=1; j<=n; j++)
    {
      if(abs(2*sum-x[i]-x[j])<eps&&abs(y[i]-y[j])<eps)   //这里相当于判断2*sum是否等于x[i]+y[j]且y[i]是否等于y[j]
                   break;
    }
      if(j>n) break;
    }
      if(i>n)
    cout<<"YES"<<endl;
      else
    cout<<"NO"<<endl;
    }
    }

  • 相关阅读:
    快速清除Word文档多余空行
    使用快照隔离
    hive 常用运算
    shell_Day02
    Study python_01
    Study python_02
    Windows server 2016 域服务1之创建域
    Study python_04
    shell_Day01
    Study python_03
  • 原文地址:https://www.cnblogs.com/hfc-xx/p/4657072.html
Copyright © 2011-2022 走看看