题解 | #代理服务器#
代理服务器
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;
}
