【MT2039】换换换
题解:代码1是用结构体来进行的操作,但是每次查找会浪费很多时间,故超时
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<bits/stdc++.h> using namespace std; int n,t,m,x,y; string k; struct node{ string s; }a[50004]; void change(int p,int q){ string v=a[q].s; a[q].s=a[p].s; a[p].s=v; } int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); cin>>n>>m>>t; for(int i=1;i<=n;i++) cin>>a[i].s; while(t--){ cin>>x>>y; change(x,y); } for(int i=1;i<=m;i++){ cin>>k; for(int j=1;j<=n;j++){ if(k==a[j].s){ cout<<j<<endl; break; } } } return 0; }
正解:用map求解 也是第一次接触stl的map 确实方便很多, 前一个元素为关键字,下一个元素为关键字的值
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<bits/stdc++.h> using namespace std; const int N=50004; int n,m,t,p,q; string s[N],x; map<string,int>mp; int main(){ freopen("11.in","r",stdin); freopen("11.out","w",stdout); cin>>n>>m>>t; for(int i=1;i<=n;i++){ cin>>s[i]; mp[s[i]]=i; } while(t--){ cin>>p>>q; swap(s[p],s[q]); swap(mp[s[p]],mp[s[q]]); } while(m--){ cin>>x; cout<<mp[x]<<endl; } return 0; }