zoukankan      html  css  js  c++  java
  • Codeforces Round #402 (Div. 2) D. String Game

    题目链接:Codeforces Round #402 (Div. 2) D. String Game

    题意:

    给你两个字符串a,b,然后给你n=strlen(a)个数字n1,n2,...,nn,表示依次删a[ni-1]个字符。

    当a串删到有k(k任意)个子串组合起来(顺序不变)刚好等于b串时,就不能删了。

    比如 abba->(ab a) 刚好包括 aba ,bba不包括aab。

    问最多能删多少次。

    题解:

    最开始还以为是要用某种数据结构啥的,结果都想复杂了,直接二分答案就行。

    然后线性判断删掉后的串是否包括b就行。

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 const int N=2e5+7;
     6 
     7 bool vis[N];
     8 char a[N],b[N];
     9 int c[N],n,m;
    10 
    11 int check(int mid)
    12 {
    13     F(i,1,n)vis[i]=0;
    14     F(i,mid+1,n)vis[c[i]]=1;
    15     int cnt=1;
    16     F(i,1,n)
    17     {
    18         if(!vis[i])continue;
    19         if(a[i]==b[cnt])cnt++;
    20         if(cnt>m)return 1;
    21     }
    22     return 0;
    23 }
    24 
    25 int main(){
    26     scanf("%s%s",a+1,b+1);
    27     n=strlen(a+1),m=strlen(b+1);
    28     F(i,1,n)scanf("%d",c+i);
    29     int l=0,r=n-1,mid,ans;
    30     while(l<=r)
    31     {
    32         mid=l+r>>1;
    33         check(mid)?l=mid+1,ans=mid:r=mid-1;
    34     }
    35     printf("%d
    ",ans);
    36     return 0;
    37 }
    View Code
  • 相关阅读:
    禁止鼠标多次点击选中div中的文字
    深入浅出 Nodejs 学习笔记 1
    svn 树冲突
    nodejs 按行读取 readline
    git版本控制器的基本使用
    规范javascript书写
    media query
    软件工程
    The sixth day
    The fifth day
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6445483.html
Copyright © 2011-2022 走看看