UVa 10763 - Foreign Exchange(结构体排序)

来源:互联网 发布:led灯带控制软件 编辑:程序博客网 时间:2024/06/05 10:21

有n个学生要当交换生,输入每个人的目标地和原始地,学生两两交换,问能否交换成功。

用结构体排序做的,两个vector分别保存交换前和交换后的学生,对比目标地和原始地是否完全相同,相同即可完成交换。

#include<iostream>#include<vector>#include<algorithm>using namespace std;struct candidate{    int a;    int b;};vector<candidate>cd;vector<candidate>excd;int n;candidate x;bool compare(candidate x,candidate y){    if(x.a!=y.a) return x.a<y.a;    else return x.b<y.b;}int main(){    while(cin>>n&&n){        int t=n;        for(int i=0;i<n;i++){            cin>>x.a>>x.b;            cd.push_back(x);            swap(x.a,x.b);            excd.push_back(x);        }        sort(cd.begin(),cd.end(),compare);        sort(excd.begin(),excd.end(),compare);        for(int i=0;i<n;i++)            if(cd[i].a==excd[i].a&&cd[i].b==excd[i].b) t--;        if(t) cout<<"NO"<<endl;        else cout<<"YES"<<endl;        cd.clear();        excd.clear();    }    return 0;}


这是最初的代码:

超时了。

#include<iostream>#include<vector>using namespace std;vector<int>a;vector<int>b;int n,x,y;int main(){    while(cin>>n&&n)    {        int t=1;        for(int i=0;i<n;i++)        {            cin>>x>>y;            a.push_back(x);            b.push_back(y);        }        for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                if(a[i]==b[j]&&a[j]==b[i]&&i!=j)                    a[i]=a[j]=b[i]=b[j]=0;            }        }        for(int i=0;i<n;i++)            if(a[i])            {                t=0;                break;            }        if(t)            cout<<"YES"<<endl;        else            cout<<"NO"<<endl;        a.clear();        b.clear();    }    return 0;}

0 0