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);
        }
    }
  • 相关阅读:
    CentOS7.0安装Nginx 1.7.4
    Java If ... Else
    Java 布尔运算
    Java Math
    Java 运算符
    Java 数据类型
    Java 变量
    Java 注释
    Java 基本语法
    Java 简介
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12917892.html
Copyright © 2011-2022 走看看