程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Symmetry(對稱軸存在問題),symmetry對稱軸

Symmetry(對稱軸存在問題),symmetry對稱軸

編輯:C++入門知識

Symmetry(對稱軸存在問題),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)

 

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved