思路:减少复杂度。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; } }