UVA 1595

来源:互联网 发布:数据采集模块 编辑:程序博客网 时间:2024/05/16 16:55

原题链接:

大致题意: 就是给你一堆点,问是否存在对称轴。
思路:主要就是两个排序,先对x升序排序,之后对后半部分的y进行降序排序。之前以为在对称轴上的点的y值也必须相同,后来发现给的测试用例没有要求相同,可能是共线的原因吧,修了这个问题就AC了。

#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;vector<P>v;int T,x,y,n;P p;bool cmp(P p1,P p2){    if(p1.first!=p2.first){        return p1.first<p2.first;    }    return p1.second>p2.second;}void print(){    for(int i=0;i<n;i++){        printf(" %d %d\n",v[i].first,v[i].second);    }    printf("...%d...\n",T);}bool judge(){    if(n==1){        return true;    }    sort(v.begin(),v.end());    sort(v.begin()+(n+1)/2,v.end(),cmp);    int left,right;    if(n&1){        left=right=n/2;    }else{        left=n/2-1;        right=n/2;    }    for(int i=left,j=right;i>=0;i--,j++){        //这里跳过在对称轴上的点        if(v[i].first==v[j].first){            continue;        }        if(v[left].first-v[i].first!=v[j].first-v[right].first           ||v[i].second!=v[j].second){            return false;        }    }    return true;}int main(){    //freopen("in.txt","r",stdin);    scanf("%d",&T);    while(T--){        scanf("%d",&n);        for(int i=0;i<n;i++){            scanf("%d%d",&p.first,&p.second);            v.push_back(p);        }        if(judge()){            printf("YES\n");        }else{            printf("NO\n");        }        v.clear();    }    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 洛登之夜保险柜密码 破晓by洛夜 洛夜作品 洛旋御墨夜全文免费阅读 雨洛夜修宸全文 言洛希厉夜祈免费阅读 单向强制 洛夜 新婚1001夜吻安总裁夫人洛筝 厉夜祈言洛希全文免费阅读 楚云洛君夜擎 魔兽之艾泽拉斯龙王 洛夜青裳 潘菲洛夫 巴甫洛夫 巴普洛夫 基洛夫 马卡洛夫 达洛夫事件 凯洛夫 洛夫 基洛夫事件 基洛夫空艇 克鲁姆洛夫 伏罗希洛夫 季米特洛夫 迪亚特洛夫 李洛夫奇案 克雷洛夫 沙波瓦洛夫 苏沃洛夫 巴甫洛夫起床法 奥斯特洛夫斯基 洛夫克拉夫特 迪亚特洛夫事件 葛洛夫街兄弟作品 基洛夫级巡洋舰 奥斯特洛夫斯基名言 潘菲洛夫二十八勇士在线播放 谢尔盖别洛夫有多强 谢尔盖别洛夫 巴普洛夫条件反射 柯尔莫哥洛夫