//用能访问的最远的服务器的代理服务器 #include <iostream> using namespace std; struct server{ string ip; int far;//代理服务器能到达的最远的服务器的下标 }; int main() { int n,m; while(cin>>n) { server dl[n+1]; for(int i=1;i<=n;i++) { cin>>dl[i].ip; } cin>>m; server fwq[m+1]; for(int i=1;i<=m;i++) { cin>>fwq[i].ip; } int fuhe=1; //考虑没有符合要求的安排方式的情况 if(n==1) { for(int j=1;j<=m;j++) { if(dl[1].ip==dl[j].ip) { cout<<"-1"<<endl; fuhe=0; break; } } } //考虑有符合要求的安排方式的情况 int s=-1; int xb=1;//当前访问到的服务器下标 int flag=0;//为1代表已经有代理服务器可以访问剩余所有服务器了 while(xb<=m&&fuhe==1) { s++; for(int i=1;i<=n&&(flag==0);i++)//更新far { int j=xb;//从当前服务器的下标开始算 while(dl[i].ip!=fwq[j].ip) { j++; if(j==m+1) { flag=1; break; } } dl[i].far=j; } if(flag==1) { xb=m+1; continue; } xb=dl[1].far;//下标不能是0 for(int i=1;i<=n;i++) { if(dl[i].far>xb)xb=dl[i].far; } } if(fuhe==1) cout<<s<<endl; } }