看到题目标签中为贪心+二分。想了想当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;
}



京公网安备 11010502036488号