有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博客,格式可能有所偏差。 **