码迷,mamicode.com
首页 > 其他好文 > 详细

Symmetry(对称轴存在问题)

时间:2015-07-18 17:00:04      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

 

 

                    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.

 

技术分享

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技术分享N技术分享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)

 

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)
break;
}
  if(j>n) break;
}
  if(i>n)
cout<<"YES"<<endl;
  else
cout<<"NO"<<endl;
}
}

Symmetry(对称轴存在问题)

标签:

原文地址:http://www.cnblogs.com/hfc-xx/p/4657072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!