news 2026/4/26 19:00:28

打卡信奥刷题(3171)用C++实现信奥题 P7919 [Kubic] ABC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3171)用C++实现信奥题 P7919 [Kubic] ABC

P7919 [Kubic] ABC

题目背景

建议先看 D 题题目背景。

题目描述

给定一个长度为nnn的只包含A,B,C\texttt{A,B,C}A,B,C的字符串SSS,你可以进行若干次操作,每次操作为:

  • 先选择一个区间[l,r][l,r][l,r],你需要保证1≤l≤r≤n1\le l\le r\le n1lrn

  • 再选择三个字符pA,pB,pC∈{A,B,C}pA,pB,pC\in\{\texttt{A,B,C}\}pA,pB,pC{A,B,C},并将Sl…rS_{l\dots r}Slr中所有A\texttt{A}A变为pApApA,所有B\texttt{B}B变为pBpBpB,所有C\texttt{C}C变为pCpCpCpA,pB,pCpA,pB,pCpA,pB,pC可以相等

求出最少需要进行多少次操作才能使得SSS任意相邻两个字符不同,并输出构造方案

输入格式

第一行,一个整数nnn

第二行,一个长度为nnn的字符串SSS

输出格式

第一行,一个整数mmm,表示你所构造的方案的操作次数。

接下来mmm行,每行两个整数l,rl,rl,r和三个字符pA,pB,pCpA,pB,pCpA,pB,pC

你需要保证1≤l≤r≤n,pA,pB,pC∈{A,B,C}1\le l\le r\le n,pA,pB,pC\in\{\texttt{A,B,C}\}1lrn,pA,pB,pC{A,B,C}

注意:pA,pB,pCpA,pB,pCpA,pB,pC之间不需要,也不应该加空格(参考样例输出)

输入输出样例 #1

输入 #1

5 ABBAA

输出 #1

1 3 4 BAC

输入输出样例 #2

输入 #2

5 ABCBA

输出 #2

0

说明/提示

对于100%100\%100%的数据,1≤n≤5×103,Si∈{A,B,C}1\le n\le 5\times 10^3,S_i\in\{\texttt{A,B,C}\}1n5×103,Si{A,B,C}

分值nnn特殊性质
Subtask⁡1\operatorname{Subtask}1Subtask1111无特殊限制∀i∈[1,n),Si≠Si+1\forall i\in[1,n),S_i\neq S_{i+1}i[1,n),Si=Si+1
Subtask⁡2\operatorname{Subtask}2Subtask2191919≤10\le 1010
Subtask⁡3\operatorname{Subtask}3Subtask3101010无特殊限制Si=AS_i=\texttt{A}Si=A
Subtask⁡4\operatorname{Subtask}4Subtask4202020无特殊限制Si∈{A,B}S_i\in\{\texttt{A,B}\}Si{A,B}
Subtask⁡5\operatorname{Subtask}5Subtask5202020≤100\le 100100
Subtask⁡6\operatorname{Subtask}6Subtask6303030无特殊限制

评分方法

以下情况将会使你在该测试点获得000分:

  • 输出格式不满足要求。

  • 输出多余信息(包括空格和换行符)

  • 构造的方案操作次数与标准答案不同。

  • 构造的方案不符合题目要求。

  • 时间超限。

如果没有上述情况,你在该测试点获得满分。

保证 SPJ 占用不超过100ms⁡,10MB⁡100\operatorname{ms},10\operatorname{MB}100ms,10MB

样例解释 1

一种操作过程如下:

ABBAA

ABABA

可以证明没有更优的方案。

样例解释 2

初始序列已经符合题目要求,直接输出一行000即可。

C++实现

#include<cstdio>intn,x,y,t;chars[5003];intl[5003],r[5003];intmain(){scanf(" %d %s",&n,s+1);x=1,y=n;while(x<y){while(x<y&&s[x]!=s[x+1])++x;while(y>x&&s[y]!=s[y-1])--y;if(x==y)break;l[++t]=++x,r[t]=--y;}printf("%d\n",t);if(l[t]>r[t])r[t]=n;for(inti=1;i<=t;++i)printf("%d %d BCA\n",l[i],r[i]);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 18:59:35

ViGEmBus深度解析:Windows虚拟手柄驱动的核心技术实战指南

ViGEmBus深度解析&#xff1a;Windows虚拟手柄驱动的核心技术实战指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 如果你在Windows平台上遇到过游戏手柄…

作者头像 李华
网站建设 2026/4/26 18:49:47

Snap.Hutao原神工具箱终极指南:10个提升游戏效率的实用技巧

Snap.Hutao原神工具箱终极指南&#xff1a;10个提升游戏效率的实用技巧 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn/Sna…

作者头像 李华
网站建设 2026/4/26 18:45:35

python高级特性简介

切片切片就相当于其他语言中的截断函数&#xff0c;取部分指定元素用的。12345678L list(range(100))#利用切片取部分元素print(L[0:10]) #取从索引从0到9的前10个元素print(L[-10:]) #取最后10个元素print(L[10:20])#取从索引10到19的10个元素print(L[:10:2])#从前10个元素中…

作者头像 李华
网站建设 2026/4/26 18:40:58

2025届学术党必备的六大降AI率工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作跟内容创作范畴&#xff0c;AI生成文本的检测越发严格&#xff0c;降AI率网站是专…

作者头像 李华
网站建设 2026/4/26 18:40:57

2025届最火的降AI率网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对知网AI检测系统的识别逻辑&#xff0c;要降低论文疑似AI生成比例&#xff0c;需采取系统…

作者头像 李华
网站建设 2026/4/26 18:36:20

3步轻松备份QQ空间所有历史说说:GetQzonehistory完整指南

3步轻松备份QQ空间所有历史说说&#xff1a;GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里那些记录青春岁月的说说、照片和评论会随着时间…

作者头像 李华