感恩~~ 不过考场上大概是没法在规定时间内做出来的。
#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;
}