Symmetry(UVa 1595)

来源:互联网 发布:单片机设计项目 编辑:程序博客网 时间:2024/04/28 11:31

本题链接

题意:

给N个点,求这些点是否关于y轴对称。

思路:

先求出这些点在x轴上最大点和最小的点的中点(要把所有的x轴上的点乘于2,防止出现实数),然后把每个坐标和所有坐标进行比较,如果两个点的y轴相等x轴的中点等于最大和最小点的中点,这个点就是有对称点的。直到把所有点求完,如果有一个点没有对称点,那么所有点就不对称。

#include <iostream>#include <cstdio>using namespace std;int x[1010];int y[1010];int N;int mid;bool funt(int a){    for(int i=0;i<N;i++)    {        if(y[i]==y[a]&&(x[i]+x[a])==mid*2)            return false;    }    return true;}int main(){    int T;    cin>>T;    while(T--)    {        cin>>N;        int max_i=-20000;        int min_i=20000;        int i;        for(i=0;i<N;i++)        {            int k;            cin>>k>>y[i];            x[i]=k*2;            if(x[i]>max_i)                max_i=x[i];            if(x[i]<min_i)                min_i=x[i];        }         mid=(max_i+min_i)/2;        for(i=0;i<N;i++)            if(funt(i))            {                break;            }        if(i<N)            cout<<"NO"<<endl;        else            cout<<"YES"<<endl;    }    return 0;}


0 0
原创粉丝点击