# include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
const int MAXN = 200000;
char a[MAXN+3], b[MAXN+3];
int arr[MAXN+3], vis[MAXN+3]={0}, cas=0, len, len2;
bool judge(int x)
{
int cnt = 1;
for(int i=0; i<x; ++i)
vis[arr[i]] = cas;
for(int i=1; i<=len; ++i)
if(a[i] == b[cnt] && vis[i] != cas)
{
++cnt;
if(cnt == len2+1)
return true;
}
return false;
}
int main()
{
while(~scanf("%s%s",a+1,b+1))
{
len = strlen(a+1);
len2 = strlen(b+1);
for(int i=0; i<len; ++i)
scanf("%d",&arr[i]);
int l=1, r=len, mid;
while(l<=r)
{
++cas;//时间戳,避免重复memset vis数组浪费时间。
mid = (l+r)>>1;
if(judge(mid))
l = mid + 1;
else
r = mid - 1;
}
printf("%d\n",r);
}
return 0;
}
CF779D:String Game(二分)
最新推荐文章于 2018-07-23 23:07:48 发布