题目来源:码蹄集
题目描述:
B站老师思路讲解链接:https://www.bilibili.com/video/BV1cA411z7EL/?t=2622.0&vd_source=3ae2a916df1bc5c1114c2bf3e95a2118
Python代码实现:
原文参考链接:https://blog.51cto.com/u_15745546/5950626
def main():
n,q,t = map(int,input().split())
s2idx = {}
arr = [""]
for i in range(1,n+1):
s = input()
arr.append(s)
s2idx[s] =i
for _ in range(t):
a,b = map(int,input().split())
sa,sb = arr[a],arr[b]
idxa,idxb = s2idx[sa],s2idx[sb]
s2idx[sa] = idxb
s2idx[sb] = idxa
arr[a],arr[b] = arr[b],arr[a]
for _ in range(q):
s = input()
print(s2idx[s])
if __name__ == '__main__':
main();
C++代码实现:
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int n, q, t;
cin >> n >> q >> t;
unordered_map<string, int> s2idx;
vector<string> arr = {""};
for (int i = 1; i <= n; ++i) {
string s;
cin >> s;
arr.push_back(s);
s2idx[s] = i;
}
while (t--) {
int a, b;
cin >> a >> b;
string sa = arr[a];
string sb = arr[b];
int idxa = s2idx[sa];
int idxb = s2idx[sb];
s2idx[sa] = idxb;
s2idx[sb] = idxa;
swap(arr[a], arr[b]);
}
while (q--) {
string s;
cin >> s;
cout << s2idx[s] << endl;
}
return 0;
}
Java代码实现:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int q = sc.nextInt();
int t = sc.nextInt();
Map<String, Integer> s2idx = new HashMap<>();
List<String> arr = new ArrayList<>();
arr.add("");
for (int i = 1; i <= n; ++i) {
String s = sc.next();
arr.add(s);
s2idx.put(s, i);
}
while (t-- > 0) {
int a = sc.nextInt();
int b = sc.nextInt();
String sa = arr.get(a);
String sb = arr.get(b);
int idxa = s2idx.get(sa);
int idxb = s2idx.get(sb);
s2idx.put(sa, idxb);
s2idx.put(sb, idxa);
Collections.swap(arr, a, b);
}
while (q-- > 0) {
String s = sc.next();
System.out.println(s2idx.get(s));
}
sc.close();
}
}