思路:减少复杂度。M是给定字符串寻找所在位置,如果每次都遍历找的话复杂度很高。而t范围小,说明杯子的个数少,所以在t次交换后用map记录,输出时直接用map[string]输出位置即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10;
int n, m, t;
string mp[N];
map<string, int> mpp;
int main()
{
cin >> n >> m >> t;
for (int i = 1; i <= n; i++)
{
string str;
cin >> str;
mp[i] = str;
}
while (t--)
{
int p1, p2;
cin >> p1 >> p2;
if (p1 > p2)
swap(p1, p2);
swap(mp[p1], mp[p2]);
}
for (int i = 1; i <= n; i++)
{
mpp[mp[i]] = i;
}
while (m--)
{
string str;
cin >> str;
cout<<mpp[str]<<endl;
}
}