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

news2024/12/26 22:44:50

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

一.题目描述

这里是引用

题目大意:给你一串由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的比赛,想第一时间看到题目解析的就赶紧关注我呦~
之后基本上每场比赛比完第二天都会出前几题的题目解析哦~

在这里送大家一句话:广积粮,缓称王!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ftp传文件越来越慢的原因,以及解决方案

FTP 是一种常用的文件传输协议&#xff0c;它基于客户端-服务端模型工作&#xff0c;允许用户通过网络传输文件。但是&#xff0c;有时候在使用 FTP 的过程中&#xff0c;文件传输速度会逐渐变慢&#xff0c;这给用户带来了很多困扰。本文将分析 FTP 传文件变慢的原因&#xff…

Jwt(Json web token)——从Http协议到session+cookie到Token Jwt介绍 Jwt的应用:登陆验证的流程

目录 引出从Http协议到session&cookie到TokenHTTP协议session & cookiesessioncookie为什么需要session & cookie? JavaEE传统解决长连接方案问题&#xff1a;分布式不适用解决方案&#xff1a;令牌Token Jwt&#xff0c;Json web tokenjwt的结构Header加密算法Ba…

MySQL Workbench的使用

MySQL Workbench 是一款专门为 MySQL 设计的可视化数据库管理软件&#xff0c;我们可以在自己的计算机上&#xff0c;使用图形化界面远程管理 MySQL 数据库。 MySQL Workbench 的初始界面如下图所示。 点击方框后会进入这个界面&#xff0c;这样就与数据库连接完毕了 使用 Wo…

Docker 全栈体系(四)

Docker 体系&#xff08;高级篇&#xff09; 一、Docker复杂安装 1. 安装mysql主从复制 主从搭建步骤 新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysq…

SpringBoot-4

Spring Boot 使用 slf4j 日志 在开发中经常使用 System.out.println()来打印一些信息&#xff0c;但是这样不好&#xff0c;因为大量的使用 System.out 会增加资源的消耗。实际项目中使用的是 slf4j 的 logback 来输出日志&#xff0c;效率挺高的&#xff0c;Spring Boot 提供…

【go语言学习笔记】02 Go语言高效并发

文章目录 一、并发基础1. 协程&#xff08;Goroutine&#xff09;2. Channel2.1 声明2.2 无缓冲 channel2.3 有缓冲 channel2.4 关闭 channel2.5 单向 channel2.6 selectchannel 示例 二、同步原语1. 资源竞争2. 同步原语2.1 sync.Mutex2.2 sync.RWMutex2.3 sync.WaitGroup2.4 …

2023 NVIDIA 创乐博 CUDA 线上训练营笔记

一、学习ubuntu 2.1修改权限 linux指令学习 cd course //进入course目录 ls //列出文件夹 clean //清屏幕//---修改权限 chmod gow text //给text文件夹添加可写权限 chmod gw make.ip chmod 755 text 可读可写可执行&#xff08;user goup o…

MySQL MHA高可用配置及故障切换

1&#xff0e;什么是 MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…

uni-app中uni-table的uni-tr无点击事件

uni-app中uni-table的uni-tr无点击事件 问题描述解决方法一解决方法二解决方法三 问题描述 本文记录用于记录使用uni-app开发过程遇到的bug。 在使用uni-table时&#xff0c;想给uni-table的行添加行点击事件&#xff1b;但发现官方并未给uni-tr增加点击行点击事件&#xff08;…

gitee 配置ssh 公钥(私钥)

步骤1&#xff1a;添加/生成SSH公钥&#xff0c;码云提供了基于SSH协议的Git服务&#xff0c;在使用SSH协议访问项目仓库之前&#xff0c;需要先配置好账户/项目的SSH公钥。 绑定账户邮箱&#xff1a; git config --global user.name "Your Name" git config --glob…

Linux静态库+demo

1.什么是Linux静态库呢&#xff1f; Linux静态库&#xff08;Static Library&#xff09;是一种包含已编译的目标代码的文件集合&#xff0c;用于在链接时与其他目标代码一起组成可执行文件。与动态库&#xff08;Dynamic Library&#xff09;不同&#xff0c;静态库的代码在编…

集成学习Boosting - AdaBoost

目录 1. Boosting方法的基本思想 1.1 Bagging VS Boosting 1.2 Boosting算法的基本元素与基本流程 1.3 sklearn中的Boosting算法 2. AdaBoost 3 AdaBoost的基本参数与损失函数 3.1 参数 base_estimator&#xff0c;属性base_estimator_与estimators_ 3.1. 参数 learnin…

构建高效供应商管理体系,提升企业采购能力

随着企业采购规模的不断扩大和全球化竞争的加剧&#xff0c;供应商管理变得越来越重要。构建一个高效的供应商管理体系是企业提升采购能力、降低采购成本的关键一环。本文将重点探讨供应商管理体系的意义和作用&#xff0c;并介绍如何构建一个高效的供应商管理体系。 一、供应商…

Openlayers实战,Openlayers一个车辆转向运动轨迹动画,支持根据轨迹运动方向自动改变车头转向角度,无需定时器,丝滑小车转向运动效果

专栏目录: OpenLayers入门教程汇总目录 前言 本章作为OpenLayers入门文章《OpenLayers入门,OpenLayers动画效果实现,OpenLayers实现轨迹运动动画》的的增强进阶篇章,实现了入门教程中没有实现的小车车头方向根据运动方向自动转向的功能。 二、依赖和使用 "ol&quo…

四、运算符(1)

本章概要 开始使用优先级赋值 方法调用中的别名现象 算术运算符 一元加减运算符 递增和递减 Java 是从 C 的基础上做了一些改进和简化发展而成的。对于 C/C 程序员来说&#xff0c;Java 的运算符并不陌生。如果你已了解 C 或 C&#xff0c;大可以跳过本章和下一章&#xff0c…

微信小程序开店的步骤

越来越多实体店家在寻求入局电商的机会&#xff0c;随着微信推出了小程序&#xff0c;商家们看到了机会&#xff0c;微信小程序开发不仅成本较低&#xff0c;还能借助微信进行推广&#xff0c;帮助商家实现线上线下的对接&#xff0c;是商家实现开店的极佳选择。那么微信小程序…

Linux 网络收包流程

哈喽大家好&#xff0c;我是咸鱼 我们在跟别人网上聊天的时候&#xff0c;有没有想过你发送的信息是怎么传到对方的电脑上的 又或者我们在上网冲浪的时候&#xff0c;有没有想过 HTML 页面是怎么显示在我们的电脑屏幕上的 无论是我们跟别人聊天还是上网冲浪&#xff0c;其实…

伙伴云「页面」公测正式开启,建站、文档、数据分析,丰富的数据展现能力。

一年来&#xff0c;伙伴云收到了许多用户对于仪表盘升级的期待&#xff0c;以及对新功能规划的询问。经过千百次调研、开发、内测&#xff0c;我们开发了一款页面构建引擎&#xff0c;Ta既提供了灵活的可定制性&#xff0c;也不像网页设计器晦涩难懂&#xff0c;且具有丰富的数…

Apache Pulsar 技术系列 - GEO replication 中订阅状态的同步原理

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO Replication&#xff09;、快速扩容、灵活容错等特性&#xff0c;GEO Replication 可以原生支持数据和订阅状态在多个集群之间进行复制…