|
有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.a==excd.a&&cd.b==excd.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==b[j]&&a[j]==b&&i!=j)
a=a[j]=b=b[j]=0;
}
}
for(int i=0;i<n;i++)
if(a)
{
t=0;
break;
}
if(t)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
a.clear();
b.clear();
}
return 0;
} |
|
|