题解 | #代理服务器#
代理服务器
https://www.nowcoder.com/practice/1284469ee94a4762848816a42281a9e0
#include <bits/stdc++.h> using namespace std; struct daili { string ip; int d;//第一次重复时的最远距离 }; int compare(daili x, daili y) { return x.d > y.d; //按最远距离降序排列 } int main() { int n, m, sum = 0; int now_distance = 0; cin >> n; //第一行输入:代理服务器个数 daili serv1[n];; for (int i = 0; i < n; i++) { cin >> serv1[i].ip; serv1[i].d = 10000; //默认不重复,最远距离为无限大 } cin >> m; //输入客户服务器个数 string serv2[m]; for (int i = 0; i < m; i++) { cin >> serv2[i]; } while (1) { for (int i = 0; i < n; i++) { //遍历所有的代理服务器 for (int j = now_distance; j < m; j++) { //所有的客户服务器 if (serv1[i].ip == serv2[j]) { serv1[i].d = j; //第一次出现的距离 break;//遍历下一个代理服务器 } serv1[i].d = 10000; //如果一直没有撞,就说明距离为无限大 } } sort(serv1, serv1 + n, compare); //按照最远距离从大到小排序 now_distance = serv1[0].d; //serv2的第d个元素撞了d最小是0,最大是n-1 if (now_distance == 0) { cout << -1 << endl; return 0; } if (now_distance == 10000) break; //如果最远的是10000,说明已经可以走到底了 sum++; } cout << sum << endl; return 0; }