Codeforces Round #402 (Div. 2) D(简单)(二分)

来源:互联网 发布:破解路由器密码的软件 编辑:程序博客网 时间:2024/05/29 13:33
题目链接
题解:水题,二分法,暴力判断即可。
PS:下次看到求最值的题,一定要想到二分法。如果是最小值最大类问题,十成有十成是二分法!
代码如下:
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int maxn = 2e5 + 10;char s1[maxn],s2[maxn];int a[maxn];int vis[maxn];int n,m;bool check(int k){memset(vis,0,sizeof(vis));for(int i = 1;i <= k;i++)vis[a[i]] = 1;int tmp = 1;for(int i = 1;i <= n;i++){if(tmp > m) break;if(!vis[i] && s1[i] == s2[tmp]) tmp++;}//printf("tmp:  %d\n",tmp);return (tmp > m);}int main(){scanf("%s",s1 + 1);s1[0] = ' ';scanf("%s",s2 + 1);s2[0] = ' ';n = strlen(s1) - 1;m = strlen(s2) - 1;for(int i = 1;i <= n;i++)  scanf("%d",&a[i]);int left = 0,right = n + 1;while(left + 1 < right){int mid = (left + right) / 2;if(check(mid))left = mid;else right = mid;}printf("%d\n",left);return 0;}

0 0
原创粉丝点击