#include <iostream> #include <vector> #include <string> using namespace std; int findMinSwitches(const vector<string>& proxies,const vector<string>& servers); int main() { int a,b; scanf("%d",&a); vector<string> proxies(a); // 定义代理服务器 for(int i=0;i<a;i++)cin>>proxies[i]; scanf("%d",&b); vector<string> servers(b); // 定义服务器 for(int i=0;i<b;i++)cin>>servers[i]; cout<<findMinSwitches(proxies,servers)<<endl; } // 64 位输出请用 printf("%lld") // 返回最小转换数 int findMinSwitches(const vector<string> &proxies,const vector<string> &servers){ int n=proxies.size(); int m=servers.size(); int current_proxy=-1; // 当前未选择代理 int switch_count=0; // 切换代理次数 for(int j=0;j<m;j++){ if(current_proxy==-1||proxies[current_proxy]==servers[j]){// 第一次选择代理或要切换代理(遇到一样IP) if(current_proxy!=-1) switch_count++; int best_proxy=-1; int best_adaptCount=0; for(int i=0;i<n;i++){ int count=0; for(int k=j;k<m;k++){ if(servers[k]==proxies[i])break; count++; } if(count>best_adaptCount){ best_proxy=i; best_adaptCount=count; } } current_proxy=best_proxy; if(current_proxy==-1) return -1; } } return switch_count; }