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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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;
}

这是最初的代码:

超时了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **