看到题目标签中为贪心+二分。想了想当n较大时用二分快一点。
#include<iostream> #include<string> #include<algorithm> using namespace std; const int maxn=1000; const int maxm=5000; string Start[maxn]; bool flag[maxn]; string Target[maxm]; int main(){ int n,m; cin>>n; for(int i=0;i<n;++i){ cin>>Start[i]; } cin>>m; for(int i=0;i<m;++i){ cin>>Target[i]; } sort(Start,Start+n); for(int i=0;i<n;++i){ flag[i]=false; } if(n==1){ for(int i=0;i<m;++i){ if(Start[0]==Target[i]){ cout<<-1<<endl; return 0; } } cout<<0<<endl; return 0; } int count=0,result=0; for(int i=0;i<m;++i){ int left=0,right=n-1; int mid; while(left<=right){ mid=(left+right)/2; if(Start[mid]==Target[i]){ if(flag[mid]==false){ flag[mid]=true; count++; } break; }else if(Start[mid]<Target[i]){ left=mid+1; }else{ right=mid-1; } } if(count==n){ result++; count=1; for(int j=0;j<n;++j){ flag[j]=false; } flag[mid]=true; } } cout<<result<<endl; return 0; }