Symmetry

来源:互联网 发布:农业数据库 编辑:程序博客网 时间:2024/04/30 03:45
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.
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<cmath>#include<cstring>using namespace std;int x[1010],y[1010];const double f=1e-5;int n,i,j;int main(){    int t;    cin>>t;    while(t--)    {        cin>>n;        double sum=0;        for(i=1;i<=n;i++)        {            cin>>x[i]>>y[i];            sum+=x[i];        }        sum/=n;        bool is_find=true;        for(i=1;i<=n;i++)        {            for(j=1;j<=n;j++)            {                if(abs(2*sum-x[i]-x[j])<f&&abs(y[i]-y[j])<f)                   is_find=false;                break;            }        } if(is_find)        cout<<"NO"<<endl;  else        cout<<"YES"<<endl;        }}