原题:String Game
题意:
给字符串a,b,给出删a中字符串的顺序,求最多删多少次后,b还是a是子序列
解析:
一个一个删就T了,所以二分一下删的个数
代码:
string a,b;
int s[200009];
int sub[200009];
int judge(int t){
mmm(sub,0);for1(i,1,t)sub[s[i]]=1;
int ai=0,bi=0;
for(;ai<a.length();ai++){
if(sub[ai+1])continue;
if(a[ai]==b[bi])bi++;if(bi==b.length())return 1;
}
return 0;
}
int main(){
cin>>a>>b;
for1(i,1,a.length()){
scanf("%d",&s[i]);
}
int l=0,r=a.length(),mid;
while(r-l>1){
mid=r+l>>1;
if(judge(mid))l=mid;
else r=mid;
}
printf("%d\n",l);
}