首页 > 其他 > 详细

CF1354B Terminal String(思维)

时间:2020-05-19 17:17:33      阅读:57      评论:0      收藏:0      [点我收藏+]

题意:

给出一个序列,只可能出现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\n",Min);
    }
}

 

CF1354B Terminal String(思维)

原文:https://www.cnblogs.com/zhanglichen/p/12917892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!