【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

这篇具有很好参考价值的文章主要介绍了【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌏博客主页:PH_modest的博客主页
🚩当前专栏:每日一题
💌其他专栏:
🔴 每日反刍
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!

一.题目描述

【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2)),每日一题,算法,学习,c++,codeforces,ACM

题目大意:给你一串由1、2、3组成的数组,让你求一个最短的子串,要求这个子串包含1、2、3

题目链接:B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

二.思路分析

  1. 双指针
  2. 用指针L,R来遍历数组,判断L和R区间内是否有满足条件的字串,如果有将它和上一次的比较存下较小的,然后左指针L往右移动,继续判断,缩小范围 (小写的L不太看得清,就用大写的方便友友们看思路)

三.代码展示

//双指针
//用指针l,r来遍历数组,判断l和r区间内是否有满足条件的字串,如果有将它和上一次的比较存下较小的,然后左指针l往右移动,继续判断,缩小范围
//
#include<iostream>
#include<cstring>
#define int long long
using namespace std;

char s[200020];

void solve()
{
	int a=0,b=0,c=0;//记录1,2,3出现的次数
	int l=0,r=0;
	int mins=1e9;
	cin>>s;
	while(r<=strlen(s))//由于数据较小,可以直接遍历
	{
		if(a&&b&&c)//处理这段包含1、2、3的数列,将l往后移动一个,并且减去原来l位置上数字的个数
		{
			if(s[l]=='1')a--;
			if(s[l]=='2')b--;
			if(s[l]=='3')c--;
			l++;
		}
		else//如果还没有找到一段包含1,2,3的序列,r就继续往后找
		{
			if(s[r]=='1') a++;
			if(s[r]=='2') b++;
			if(s[r]=='3') c++;
			r++;
		}
		if(a&&b&&c)//a,b,c都不为0说明当前序列包含了1,2,3
		{
			int ret=r-l;//计算当前序列的长度
			mins=min(ret,mins);//和上一次进行比较,存储较小的值
		}
	}
	if(mins==1e9)//如果mins没有变还是原来赋值的1e9,说明数组中没有这样的序列,直接返回0
	{
		cout<<"0"<<"\n";
	}
	else
	{
		cout<<mins<<"\n";
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。

之后每个星期都会不定期更新codeforces和atcoder上的题目,想要学习算法的友友们千万别错过了,有什么疑问欢迎大家在评论区留言!

今天晚上cf有div.3的比赛,想第一时间看到题目解析的就赶紧关注我呦~
之后基本上每场比赛比完第二天都会出前几题的题目解析哦~

在这里送大家一句话:广积粮,缓称王!文章来源地址https://www.toymoban.com/news/detail-604958.html

到了这里,关于【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Educational Codeforces Round 134 (Div.2) D 题解

    D. Maximum AND 给定两组序列 (a) (b) ,长度为 (n) ,现有一新序列 (c) ,长度也为 (n) 。 其中, (c_i = a_i oplus b_i) 。 定义 (f(a,b) = c_1c_2……c_n) 。 现在你可以随意编排 (b) 序列的顺序,求 (f(a,b)) 的最大值。 以下位运算均是二进制。 由于按位与的运算结果是越来越小的

    2024年02月06日
    浏览(44)
  • 【每日一题】—— C. K-th Not Divisible by n (Codeforces Round 640 (Div. 4))

    🌏博客主页: PH_modest的博客主页 🚩当前专栏: 每日一题 💌其他专栏: 🔴 每日反刍 🟡 C++跬步积累 🟢 C语言跬步积累 🌈座右铭: 广积粮,缓称王! 题目大意:找第k个不能整除n的数字 题目链接:C. K-th Not Divisible by n (Codeforces Round 640 (Div. 4)) 这是一个找规律题 n前面

    2024年02月15日
    浏览(51)
  • Educational Codeforces Round 151 (Rated for Div. 2)

    A. Forbidden Integer 题意 : 你有[1, k]内除了 x x x 的整数,每个数可以拿多次,问 ∑ = n sum = n ∑ = n 是否可行并构造 思路 : 有1必能构造,否则假如没有1,假如有2, 3必定能构造出大于等于2的所有数,否则只有2的话只能构造出偶数。 B. Come Together 题意 : 棋盘上两个点同时从

    2024年02月12日
    浏览(43)
  • Educational Codeforces Round 161 (Rated for Div. 2)

    Educational Codeforces Round 161 (Rated for Div. 2) 题意:开始没看懂。。。给出长度均为n的三个字符串abc,字符串s与模板t匹配的条件为:当模板位置字符为小写时, s i s_i s i ​ 与 t i t_i t i ​ 必须相同,大写时二者必须不同。这里注意,字符匹配过程是不区分大小写的,’C‘与’

    2024年01月19日
    浏览(37)
  • Educational Codeforces Round 139 (Rated for Div. 2)

    Educational Codeforces Round 139 (Rated for Div. 2) Problem - 1766E - Codeforces 显然我们可以把0序列的贡献单独算: i*(n-i+1)  考虑只存在1,2,3的情况. 首先通过,观察到一个重要性质: 最多只有三种序列 . 含有3或纯1或纯2型. 纯1或纯2型 纯2或纯1型 我们每次添加元素的操作, 只跟上一个位置序列

    2024年02月06日
    浏览(40)
  • Educational Codeforces Round 153 D-E dp,bfs

    1860D Balanced String 首先只能是0和1交换,1在 i i i 位置,0在 j j j 位置,每交换一次产生的贡献是 2 ∗ ( i − j ) 2*(i-j) 2 ∗ ( i − j ) ,所以我们可以先算出原01串中所需要的贡献 m m m ,我们发现找到 t o l tol t o l 个1和0的位置 i k , j k i_k,j_k i k ​ , j k ​ 且 ∑ k t o l i k − j k = m

    2024年02月12日
    浏览(43)
  • Educational Codeforces Round 148 (Rated for Div. 2) 题解

    总结:5.21下午VP一场,死在了A题,给我wa崩溃了,浪费了差不多一个小时,BC还挺顺畅,虽然C题是在结束后不久交上去的。。。。 思路:其实思路很简单, “ The string s a palindrome ”, 题目已经说了所给的为回文字符串,所以直接判断一半 有几种字符 即可(开始的时候计算整

    2024年02月06日
    浏览(36)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—C)

    从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可 观察样例即可发现两个字符串只要在相同位置都有 01 存在就能成功实现转换后两个字符串相等 可以先假设字符串是可以成立的,那么接下来就判断它什么时间是

    2024年02月10日
    浏览(39)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—D)

    从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可 观察样例即可发现两个字符串只要在相同位置都有 01 存在就能成功实现转换后两个字符串相等 可以先假设字符串是可以成立的,那么接下来就判断它什么时间是

    2024年02月10日
    浏览(35)
  • Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

     一开始肯定要排个序,b相同时t大的在前边,不同时b大的在前面。 然后想最多只能选k个的限制,可以这样想,每次用到的b只能用已选到的最小的值,那可以把每个b都枚举一遍,然后每一次选时长最长的,且b大于等于当前的b的那k个不就好了吗,时间复杂度也才O(n),然

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包