题解 CF1354B 【Ternary String】
题意
给出一个字符串,只包含 \({1,2}\) 或 \({3}\) 。从中找出一个长度最短的子串,要求至少包含 \({1,2,3}\) 各一次,并输出其长度。
输入格式
本题有多组测试数据
第一行一个整数 \(t\) ,表示数据组数
接下来 \({t}\) 行,每行一个字符串 \(s\) ,它的每个字符只可能是 \(1,2\) 或 \(3\) 。\({s}\) 的长度不超过\(200000\)。
输出格式
对于每组数据,输出一行一个整数,表示最短的符合要求的子串的长度。如果不存在,输出 \(0\) 。
说明与提示
\(1 \le t \le20000\),
\(1 \le |s| \le 200000\)
Solution
我们可以开一个数组 $a $ ,其中 \(a_i\) 表示 i 上次出现的位置($ 1\le i \le 3$ ),初始时,\(a_i=-1\)。
然后线性扫过去,不断更新 \(a\),当停留在第 $ k $位时, a[ s[k]-'0' ]= k 。 显然,以第 \(k\) 位结尾的符合要求的子串长度为 k-min(a[1],a[2],a[3])+1 。此时我们可以更新 \(ans\) 。
代码 ↓
注意多测
#include<bits/stdc++.h>
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;
const int MAXN=200010;
int t,a[5],ans=MAXN;
int main (){
scanf("%d",&t);
while(t--){
string s;
cin>>s;
a[1]=-1;a[2]=-1;a[3]=-1;ans=MAXN;
int ls=s.length();
for(int i=0;i<ls;i++){
a[s[i]-'0']=i;
int minn=MAXN;
for(int j=1;j<=3;j++){
minn=min(minn,a[j]);
}
if(minn==-1)continue;
ans=min(ans,i-minn+1);
if(ans==3)break;
}
if(ans==MAXN)printf("0\n");
else printf("%d\n",ans);
}
return 0;
}
本蒟蒻第一次写题解,巨佬轻喷
题解 CF1354B 【Ternary String】的更多相关文章
- 2018牛客网暑期ACM多校训练营(第四场) A - Ternary String - [欧拉降幂公式][扩展欧拉定理]
题目链接:https://www.nowcoder.com/acm/contest/142/A 题目描述 A ternary string is a sequence of digits, where ...
- 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)
链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...
- codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题
http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...
- Balanced Ternary String CodeForces - 1102D (贪心+思维)
You are given a string ss consisting of exactly nn characters, and each character is either '0', '1' ...
- 牛客多校第四场 A Ternary String
题目描述 A ternary string is a sequence of digits, where each digit is either 0, 1, or 2. Chiaki has a t ...
- CodeForces - 1009B Minimum Ternary String
You are given a ternary string (it is a string which consists only of characters '0', '1' and '2'). ...
- B. Minimum Ternary String (这个B有点狠)
B. Minimum Ternary String time limit per test 1 second memory limit per test 256 megabytes input sta ...
- CF1009B Minimum Ternary String 思维
Minimum Ternary String time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Balanced Ternary String(贪心+思维)
题目链接:Balanced Ternary String 题目大意:给一个字符串,这个字符串只由0,1,2构成,然后让替换字符,使得在替换字符次数最少的前提下,使新获得的字符串中0,1,2 这三个字符 ...
- 【题解】Rusty String [CF827E]
[题解]Rusty String [CF827E] 传送门:\(\text{Rusty String}\) \(\text{[CF827E]}\) [题目描述] 多组数据,每组数据给出一个由 \(V, ...
随机推荐
- 【Flutter实战】定位装饰权重组件及柱状图案例
老孟导读:Flutter中有这么一类组件,用于定位.装饰.控制子组件,比如 Container (定位.装饰).Expanded (扩展).SizedBox (固定尺寸).AspectRatio (宽 ...
- [ C++ ] 勿在浮沙筑高台 —— 内存管理(18~31p) std::alloc
部分内容个人感觉不是特别重要,所以没有记录了.其实还是懒 embedded pointers 把对象的前四字节当指针用. struct obj{ struct obj *free_list_link; ...
- Python3-socketserver模块-网络服务器框架
Python3中的socketserver模块简化了编写网络服务器的任务 在实际的开发中,特别是多并发的情况下,socket模块显然对我们的用处不大,因为如果你要通过socket模块来实现并发的soc ...
- 01[了解] Dubbo
什么是Dubbo? 概述 Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源. 由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生 ...
- Docker入门(1):概述
1.摘要 在这篇文章中,我将介绍一下为什么需要虚拟化的环境. 然后我将介绍耳熟能详的虚拟化技术:虚拟机,并大致的介绍一下虚拟机的原理,希望能够让你知道虚拟机的优劣. 在之后,针对虚拟机存在的问题,引出 ...
- 隐藏input的三种方法和区别
一.<input type="hidden" />二.<input type="text" style="display:none& ...
- python中 _、__、__xx__() 区别及使用场景
1.访问权限(private.public)与继承方式(只有public继承) 在面向对象编程语言中,类的属性与方法都会设置访问控制权限,从而满足我们的设计需求.一般而言,我们通常会将对象的属性设置为 ...
- 收藏python开发各种资源官方文档
http://json.cn/ https://cn.bing.com/ https://processon.com/ https://docs.djangoproject.com/en/1.11/r ...
- 阿里云centos7安装jdk8
1.准备Linux版本的jdk8直接上Oracle公司的官网下载就好了 http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...
- 标记下 'net 查壳/脱壳/加壳' 工具
net查壳工具 DotNet Id v1.0.0.3 该net程序集被“MaxToCode”加壳了(也不能完全相信). 加壳工具就是列表中列出的了. de4Net.exe脱壳工具版本de4dot-v3 ...