zoukankan      html  css  js  c++  java
  • codeforces 762C

    给你2个串  a b

    去掉b中连续的长度最少的串  使得b剩下的串是a的字串 (可不连续)

    输出去掉以后b的串

    一开始就没半点思路  遇到C总是这样

    看了看他们

    先要n+m

    预处理出 b 从前到后在a中可以匹配的 记录位子

                b 从后往前在a中可以匹配的 记录位子

    然后二分删去的长度

    记录位子

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<math.h>
    #include<set>
    #include<string>
    
    using namespace std;
    typedef long long LL;
    
    #define MAXN 100010
    
    char a[MAXN],b[MAXN];
    int posl[MAXN],posr[MAXN];
    
    int main()
    {
        scanf("%s%s",a+1,b+1);
        int len1=strlen(a+1);
        int len2=strlen(b+1);
        int l,r;
        int j=1,k=len1;
    
        for(l=1;l<=len2;l++)
        {
            for(;j<=len1&&a[j]!=b[l];j++)
                ;
            posl[l]=j;
            j++;
        }
        posr[len2+1]=len1+1;
        for(r=len2;r>=1;r--)
        {
            for(;k>=1&&a[k]!=b[r];k--)
                ;
            posr[r]=k;
            k--;
        }
     //   printf("%d %d
    ",posr[3],r);
     //   printf("%d %d
    ",l,r);
    
            int ansl,ansr;
            l=0;
            r=len2;
            while(l<=r)
            {
                int mid=(l+r)>>1;
                int i;
                for(i=0;i+mid<=len2;i++)
                    if(posl[i]<posr[i+mid+1])
                        break;
                if(i+mid<=len2)
                    ansl=i,ansr=i+mid+1,r=mid-1;
                else
                    l=mid+1;
            }
     //       printf("%d %d
    ",ansl,ansr);
            for(int i=1;i<=ansl;i++)
                printf("%c",b[i]);
            for(int i=ansr;b[i];i++)
                printf("%c",b[i]);
     //       printf("%d %d
    ",ansl,ansr);
            if(ansr-ansl>len2)
                printf("-");
            printf("
    ");
    
        return 0;
    }
    /*
    abcbc
    ac
    */
    /*
    for(l=0,r=lb;l<=r;)
        {
            mid=l+r>>1;
            for(i=0;i+mid<=lb;++i)if(fl[i]<fr[i+mid+1])break;
            if(i+mid<=lb)a1=i,a2=i+mid+1,r=mid-1;
            else l=mid+1;
        }
    */
    /*aaeojkdyuilpdvyewjfrftkpcobhcumwlaoiocbfdtvjkhgda
    
    mlmarpivirqbxcyhyerjoxlslyfzftrylpjyouypvk
    */
    /*
    abcda
    dabda
    
    */
  • 相关阅读:
    【06】SQL语句之创建数据库
    【05】数据类型
    【02】SQL Server 配置管理器基本使用
    【01】连接到数据库引擎
    MySQL学习记录【02】常用数据类型
    MySQL学习记录【01】主键
    [转]九个Console命令,让js调试更简单
    HTML5中引入的关键特性
    [转]CSS hack大全&详解
    [转]IE8兼容Object.keys
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6423920.html
Copyright © 2011-2022 走看看