5-4 UVA 10763 Foreign Exchange交换学生

来源:互联网 发布:云计算到底哪家强 编辑:程序博客网 时间:2024/05/22 05:12

本来很简单的一道题,却因为自己不细心错了2两次。

首先得看清题意:题意是问是否每个学生都可以交换。而不是发现一个可以交换的就行。

在一个看清楚数据范围,50W,简单循环扫描肯定会超时的。

整体思路:如果n是奇数,直接输出NO,不是的话,把数据按从小打到或者从大到小顺序存到结构体中,在用sort拍结构体,直接扫描n的一半就行了!

#include<cstdio>#include<algorithm>using namespace std;const int maxn = 500000 + 5;struct people{    int x,y;    bool operator < (const people &a) const{        return x < a.x;    }}peo[maxn];int main(){    int n,cont,x,y;    while(scanf("%d",&n) == 1 && n){        cont = 0;        memset(flag,0,sizeof(flag));        for (int i = 0; i < n; ++i){            scanf("%d%d",&x,&y);            peo[i] = (people){max(x,y),min(x,y)};        }            if (n%2){printf("NO\n");goto loop;}        sort(peo,peo+n);        for (int i = 0; i < n; i+=2){           if (peo[i].x != peo[i+1].x && peo[i].y != peo[i+1].y){printf("NO\n");goto loop;}        }        printf("YES\n");        loop:continue;    }    return 0;}


0 0