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

有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;
}

你可能感兴趣的:(uva)