news 2026/6/9 21:14:20

「chaynOI R2 T1」构造字符串题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
「chaynOI R2 T1」构造字符串题解

P15036 「chaynOI R2 T1」构造字符串

题目描述

本题字符集Σ = { a , b , c } \Sigma = \{\text{a},\text{b},\text{c}\}Σ={a,b,c},即默认所有字符为a , b , c \text{a},\text{b},\text{c}a,b,c中的一个。

flow 有一个字符串T TT和一个初始为空的字符串S SS,其中∣ T ∣ = n |T|=nT=n,为了方便起见,保证T 1 = a , T 2 = b T_1=\text{a},T_2=\text{b}T1=a,T2=b

flow 有两种操作:

  1. S SS末尾添加一个字符x xx,需要满足∄ 1 ≤ i ≤ ∣ S ∣ , S i = x \nexists 1\le i\le |S|,S_i=x1iS,Si=x
  2. 选择一个位置i ii满足2 ≤ i ≤ ∣ S ∣ 2\le i\le |S|2iSS i ≠ S i − 1 S_i\ne S_{i-1}Si=Si1,将S i S_iSi修改为x xx满足x ∉ { S i − 1 , S i } x\not\in\{S_{i-1},S_i\}x{Si1,Si}(可以注意到,x xx唯一)。

请你帮助 flow 在至多10 6 10^6106次操作后将S SS修改为与T TT相同,输出任意一个合法的解均可。

数据保证有解。

输入格式

一行一个字符串T TT

输出格式

第一行一个正整数k kk,表示你的操作次数,需要满足1 ≤ k ≤ 10 6 1\le k\le 10^61k106

接下来k kk行,每行为1 x2 i,表示操作1 11加入字符x xx或操作2 22修改位置i ii

输入输出样例 #1

输入 #1

abca

输出 #1

8 1 a 1 c 1 b 2 3 1 b 2 2 2 3 2 4

说明/提示

样例 1 解释

S SS的变换过程为[] → [a] → [ac] → [acb] → [aca] → [acab] → [abab] → [abcb] → [abca] \text{[]}\to\text{[a]}\to\text{[ac]}\to\text{[acb]}\to\text{[aca]}\to\text{[acab]}\to\text{[abab]}\to\text{[abcb]}\to\text{[abca]}[][a][ac][acb][aca][acab][abab][abcb][abca]

数据范围

本题采用捆绑测试。

对于100 % 100\%100%的数据,3 ≤ n ≤ 222222 3\le n\le2222223n222222T i ∈ Σ T_i\in \SigmaTiΣ

  • Subtask1(10pts):n ≤ 5 n\le 5n5
  • Subtask2(10pts):n ≤ 1000 n\le 1000n1000
  • Subtask3(10pts):∀ 3 ≤ i ≤ n \forall 3\le i\le n∀3inT i = c T_i=\text{c}Ti=c
  • Subtask4(20pts):n ≤ 2 × 10 5 n\le 2\times10^5n2×105
  • Subtask5(50pts):无特殊限制。

思路

直接暴力构造,倒序实现。

代码见下

#include<bits/stdc++.h>usingnamespacestd;string str;chars[1000006],t[1000006];structone{longlonga;charx;longlongi;}a[1000006];longlongn,k;intmain(){cin>>str;for(inti=0;i<str.size();i++){t[++n]=str[i];}s[1]=t[1];s[2]=t[2];a[++k]={1,'a',0};a[++k]={1,'b',0};for(inti=3;i<=n;i++){a[++k]={1,'c',0};a[++k]={2,' ',i};if(i%2==1){s[i]='a';}else{s[i]='b';}}for(inti=n;i>=1;i--){if(s[i]!=t[i]){if(s[i]=='a'){if(t[i]=='b'){a[++k]={2,' ',i-1};a[++k]={2,' ',i};s[i-1]='c';}else{a[++k]={2,' ',i};}}elseif(s[i]=='b'){if(t[i]=='a'){a[++k]={2,' ',i-1};a[++k]={2,' ',i};s[i-1]='c';}else{a[++k]={2,' ',i};}}else{if(t[i]=='a'){if(s[i-1]=='b'){a[++k]={2,' ',i};}else{a[++k]={2,' ',i};a[++k]={2,' ',i-1};a[++k]={2,' ',i};s[i-1]='c';}}else{if(s[i-1]=='a'){a[++k]={2,' ',i};}else{a[++k]={2,' ',i};a[++k]={2,' ',i-1};a[++k]={2,' ',i};s[i-1]='c';}}}}}if(k<=1000000){cout<<k<<endl;for(inti=1;i<=k;i++){if(a[i].a==1){cout<<a[i].a<<" "<<a[i].x<<'\n';}else{cout<<a[i].a<<" "<<a[i].i<<'\n';}}}else{k=0;n=0;for(inti=0;i<str.size();i++){t[++n]=str[i];}s[1]=t[1];s[2]=t[2];a[++k]={1,'a',0};a[++k]={1,'b',0};for(inti=3;i<=n;i++){a[++k]={1,'c',0};a[++k]={2,' ',i};if(i%2==1){s[i]='a';}else{s[i]='b';}}for(inti=n;i>=1;){if(s[i]!=t[i]){if(s[i]=='a'){if(t[i]=='b'){intu=i;for(intj=i;j>=1;j--){if(s[j]==t[j]||t[j]=='c'){u=j+1;break;}}for(intj=u;j<=i;j+=2){a[++k]={2,' ',j};}for(intj=u+1;j<=i;j+=2){a[++k]={2,' ',j};}for(intj=u;j<=i;j+=2){a[++k]={2,' ',j};}a[++k]={2,' ',u-1};a[++k]={2,' ',u};a[++k]={2,' ',u-1};i=u-1;}else{a[++k]={2,' ',i};i--;}}else{if(t[i]=='a'){intu=i;for(intj=i;j>=1;j--){if(s[j]==t[j]||t[j]=='c'){u=j+1;break;}}for(intj=u;j<=i;j+=2){a[++k]={2,' ',j};}for(intj=u+1;j<=i;j+=2){a[++k]={2,' ',j};}for(intj=u;j<=i;j+=2){a[++k]={2,' ',j};}a[++k]={2,' ',u-1};a[++k]={2,' ',u};a[++k]={2,' ',u-1};i=u-1;}else{a[++k]={2,' ',i};i--;}}}else{i--;}}cout<<k<<endl;for(inti=1;i<=k;i++){if(a[i].a==1){cout<<a[i].a<<" "<<a[i].x<<'\n';}else{cout<<a[i].a<<" "<<a[i].i<<'\n';}}}return0;}```
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 7:59:28

DeepSeek-R1-Distill-Qwen-1.5B实战推荐:最适合初学者的镜像方案

DeepSeek-R1-Distill-Qwen-1.5B实战推荐&#xff1a;最适合初学者的镜像方案 你是不是也遇到过这些情况&#xff1f; 想在自己的笔记本上跑一个真正能写代码、解数学题、还能讲清楚推理过程的模型&#xff0c;结果发现——7B模型要6GB显存&#xff0c;13B直接卡死&#xff1b;…

作者头像 李华
网站建设 2026/6/10 8:03:04

零配置启动GLM-4.6V-Flash-WEB,开发者直呼省力

零配置启动GLM-4.6V-Flash-WEB&#xff0c;开发者直呼省力 你有没有过这样的经历&#xff1a;花半天配环境、改依赖、调路径&#xff0c;就为了跑通一个视觉语言模型的网页界面&#xff1f;等终于看到“Hello World”弹出来&#xff0c;时间已经过去两小时——而真正想做的图文…

作者头像 李华
网站建设 2026/6/10 8:03:03

如何验证MGeo是否正常运行?看这一篇就够了

如何验证MGeo是否正常运行&#xff1f;看这一篇就够了 1. 验证目标&#xff1a;明确“正常运行”的具体标准 在部署完 MGeo 地址相似度匹配镜像后&#xff0c;很多用户会遇到一个看似简单却容易被忽略的问题&#xff1a;“我点开了Jupyter&#xff0c;也运行了脚本&#xff0…

作者头像 李华
网站建设 2026/6/10 7:54:44

AI智能二维码工坊效率提升:自动化脚本调用生成接口示例

AI智能二维码工坊效率提升&#xff1a;自动化脚本调用生成接口示例 1. 为什么需要自动化调用二维码接口&#xff1f; 你有没有遇到过这样的场景&#xff1a; 每天要为几十个商品链接批量生成带品牌LOGO的二维码&#xff1f; 运营同事临时要发50张活动海报&#xff0c;每张都要…

作者头像 李华
网站建设 2026/6/10 8:31:47

SiameseUIE中文NLP落地:比SpaCy更适配中文语义的轻量抽取方案

SiameseUIE中文NLP落地&#xff1a;比SpaCy更适配中文语义的轻量抽取方案 1. 为什么中文信息抽取需要专属方案&#xff1f; 你有没有试过用SpaCy处理一段古文&#xff1f;比如“王勃字子安&#xff0c;绛州龙门人&#xff0c;六岁能属文”&#xff0c;结果它把“子安”当成人…

作者头像 李华
网站建设 2026/6/10 9:24:42

一键部署CLAP音频分类:小白也能懂的完整教程

一键部署CLAP音频分类&#xff1a;小白也能懂的完整教程 【免费镜像下载】CLAP 音频分类镜像&#xff08;clap-htsat-fused&#xff09; 零样本音频语义分类 Web 服务&#xff0c;开箱即用&#xff0c;无需代码基础。 你是否遇到过这样的问题&#xff1a;手头有一段现场录制的…

作者头像 李华