【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;
}

 

posted @ 2024-04-10 15:24  #Cookies#  阅读(13)  评论(0编辑  收藏  举报