感恩~~ 不过考场上大概是没法在规定时间内做出来的。

#include <iostream>
#include <algorithm>

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;
}