首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【CodeForces】779D - String Game(二分)

【CodeForces】779D - String Game(二分)

作者头像
FishWang
发布2025-08-26 20:46:22
发布2025-08-26 20:46:22
1320
举报

题目链接:这里写链接内容

这里写图片描述
这里写图片描述

题意:依次删除字符串的字符,直到a串不含b串。问最多删多少。


题解: 直接二分结果,用一个数组记录要删除的字符在第几个位置。


代码如下:

代码语言:javascript
复制
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define CLR(a,b) memset(a,b,sizeof(a))
#define PI acos(-1.0)
#define LL long long
char str1[200000+5],str2[200000+5];
int arr[200000+5];
int l1,l2;
bool check(int mid)
{
    int pos1 = 1,pos2 = 1;
    while (pos2 <= l2)
    {
        if (pos1 > l1)
            return false;
        if (arr[pos1] <= mid)
        {
            pos1++;
            continue;
        }
        if (str1[pos1] == str2[pos2])
        {
            pos1++;
            pos2++;
        }
        else
            pos1++;
    }
    return true;
}
int main()
{
    scanf ("%s %s",str1+1,str2+1);
    l1 = strlen(str1+1);
    l2 = strlen(str2+1);
    for (int i = 1 ; i <= l1 ; i++)
    {
        int t;
        scanf ("%d",&t);
        arr[t] = i;
    }
    int l = 0,r = l1-l2;
    while (r >= l)
    {
        int mid = (l + r) >> 1;
        if (check(mid))
            l = mid+1;
        else
            r = mid-1;
    }
    printf ("%d\n",r);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档