zoukankan      html  css  js  c++  java
  • CF1354B Terminal String(思维)

    题意:

    给出一个序列,只可能出现123,询问最长的同时包含1的子序列的长度。

    题解:

    用三个变量保存123的最近的上一次出现的位置,用当前位置减去三个前驱位置的最小值再加1,就是符合条件序列的长度。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2e5+100;
    char s[maxn];
    int a[maxn];
    int T;
    int main () {
        scanf("%d",&T);
        while (T--) {
            scanf("%s",s);
            int N=strlen(s);
            for (int i=1;i<=N;i++) a[i]=s[i-1]-'0';
            int pre[4]={0};
            int Min=1e9;
            for (int i=1;i<=N;i++) {
                pre[a[i]]=i;
                if (pre[1]&&pre[2]&&pre[3]) {
                    Min=min(Min,i-min(pre[1],min(pre[2],pre[3]))+1);
                }
            }
            if (Min==1e9) Min=0;
            printf("%d
    ",Min);
        }
    }
  • 相关阅读:
    newgrp
    netstat
    netlink, PF_NETLINK
    netdevice
    mv
    mplayer
    mpg123
    MOVE
    motd
    more
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12917892.html
Copyright © 2011-2022 走看看