#include <iostream>
#include <bits/stdc++.h>
#define maxn 500002
using namespace std;
int N1[maxn];
int N2[maxn];
int main()
{
int n;
int a,b;
while(cin>>n&&n!=0)
{
int ok = 1;
for(int i = 0;i<n;i++)
{
cin>>N1[i]>>N2[i];
}
if(n%2)
{
cout<<"NO"<<endl;
continue;
}
sort(N1,N1+n);
sort(N2,N2+n);
for(int i = 0;i<n;i++)
{
if(N1[i]!=N2[i])
{
ok = 0;
break;
}
}
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
如果是强行只能两间学校之间互相交换,而单单只保证学校的学生人数不变的话,上面的解题是不够严谨的,修改了一下答案应该是下面这样:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a,b;
while(cin>>n&&n!=0)
{
int ok = 1;
map<pair<int,int>,int>mp;
for(int i = 0;i<n;i++)
{
cin>>a>>b;
pair<int,int>p = make_pair(a,b);
mp[p]++;
}
if(n%2)
{
cout<<"NO"<<endl;
continue;
}
for(auto it = mp.begin();it != mp.end();it++)
{
auto p1 = it->first;
a = p1.first;
b = p1.second;
p1.first = b;
p1.second = a;
if(mp[p1] != it->second)
{
cout<<"NO"<<endl;
ok = 0;
break;
}
}
if(ok) cout<<"YES"<<endl;
}
return 0;
}