zoukankan      html  css  js  c++  java
  • cf 762C. Two strings

    因为要删去1个串(读错题),所以就直接二分搞就好了。

    需要预处理出2个分别从头到尾,或从尾到头需要多长a串的数组,然后二分删去多长就好了。

     1 #include<bits/stdc++.h> 
     2 #define LL long long 
     3 #define N 100005
     4 #define lowbit(x) x&(-x)
     5 using namespace std;
     6 inline int ra()
     7 {
     8     int x=0,f=1; char ch=getchar();
     9     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    10     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    11     return x*f;
    12 }
    13 char a[N], b[N];
    14 int fl[N], fr[N];
    15 int la, lb, i, j, mid, l, r, a1, a2;
    16 int main()
    17 {
    18     scanf("%s%s",a+1,b+1);
    19     la=strlen(a+1); lb=strlen(b+1);
    20     for (i=1,fl[0]=j=0; b[i]; i++)
    21     {
    22         for (j++; j<=la && a[j]!=b[i]; j++);
    23         fl[i]=j; 
    24     }
    25     for (i=lb, fr[lb+1]=j=la+1; b[i]; i--)
    26     {
    27         for (j--; j>0 && a[j]!=b[i]; j--);
    28         fr[i]=j;
    29     }
    30     for (l=0,r=lb; l<=r;)
    31     {
    32         mid=(l+r)>>1;
    33         for (i=0; i+mid<=lb; i++)
    34             if (fl[i]<fr[i+mid+1]) break;
    35         if (i+mid<=lb) a1=i,a2=mid+i+1,r=mid-1;
    36         else l=mid+1;
    37     }
    38     for (int i=1; i<=a1; i++) putchar(b[i]);
    39     for (int i=a2; i<=lb; i++) putchar(b[i]);
    40     if (a2-a1>lb) putchar('-');
    41     return 0;
    42 }
  • 相关阅读:
    12_2 数据分析工具包。
    11_29
    11_28 mongoDB与scrapy框架
    11_28,selenium定位元素,cookies获取
    11_26爬虫find与findall
    day_93_11_25爬虫一requests,项目框架
    11_14flask的启动和orm,反向生成model
    11_13Local与偏函数
    11_12 路由与正则
    day83_11_1 阿里配python使用。
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6364492.html
Copyright © 2011-2022 走看看