[Kubic] ABC
题目背景
建议先看 D 题题目背景。
题目描述
给定一个长度为 n n n 的只包含 A,B,C \texttt{A,B,C} A,B,C 的字符串 S S S,你可以进行若干次操作,每次操作为:
-
先选择一个区间 [ l , r ] [l,r] [l,r],你需要保证 1 ≤ l ≤ r ≤ n 1\le l\le r\le n 1≤l≤r≤n。
-
再选择三个字符 p A , p B , p C ∈ { A,B,C } pA,pB,pC\in\{\texttt{A,B,C}\} pA,pB,pC∈{A,B,C},并将 S l … r S_{l\dots r} Sl…r 中所有 A \texttt{A} A 变为 p A pA pA,所有 B \texttt{B} B 变为 p B pB pB,所有 C \texttt{C} C 变为 p C pC pC, p A , p B , p C pA,pB,pC pA,pB,pC 可以相等。
求出最少需要进行多少次操作才能使得 S S S 中任意相邻两个字符不同,并输出构造方案。
输入格式
第一行,一个整数 n n n。
第二行,一个长度为 n n n 的字符串 S S S。
输出格式
第一行,一个整数 m m m,表示你所构造的方案的操作次数。
接下来 m m m 行,每行两个整数 l , r l,r l,r 和三个字符 p A , p B , p C pA,pB,pC pA,pB,pC。
你需要保证 1 ≤ l ≤ r ≤ n , p A , p B , p C ∈ { A,B,C } 1\le l\le r\le n,pA,pB,pC\in\{\texttt{A,B,C}\} 1≤l≤r≤n,pA,pB,pC∈{A,B,C}。
注意: p A , p B , p C pA,pB,pC pA,pB,pC 之间不需要,也不应该加空格(参考样例输出)。
样例 #1
样例输入 #1
5
ABBAA
样例输出 #1
1
3 4 BAC
样例 #2
样例输入 #2
5
ABCBA
样例输出 #2
0
提示
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 5 × 1 0 3 , S i ∈ { A,B,C } 1\le n\le 5\times 10^3,S_i\in\{\texttt{A,B,C}\} 1≤n≤5×103,Si∈{A,B,C}。
分值 | n n n | 特殊性质 | |
---|---|---|---|
Subtask 1 \operatorname{Subtask}1 Subtask1 | 1 1 1 | 无特殊限制 | ∀ i ∈ [ 1 , n ) , S i ≠ S i + 1 \forall i\in[1,n),S_i\neq S_{i+1} ∀i∈[1,n),Si=Si+1 |
Subtask 2 \operatorname{Subtask}2 Subtask2 | 19 19 19 | ≤ 10 \le 10 ≤10 | 无 |
Subtask 3 \operatorname{Subtask}3 Subtask3 | 10 10 10 | 无特殊限制 | S i = A S_i=\texttt{A} Si=A |
Subtask 4 \operatorname{Subtask}4 Subtask4 | 20 20 20 | 无特殊限制 | S i ∈ { A,B } S_i\in\{\texttt{A,B}\} Si∈{A,B} |
Subtask 5 \operatorname{Subtask}5 Subtask5 | 20 20 20 | ≤ 100 \le 100 ≤100 | 无 |
Subtask 6 \operatorname{Subtask}6 Subtask6 | 30 30 30 | 无特殊限制 | 无 |
评分方法
以下情况将会使你在该测试点获得 0 0 0 分:
-
输出格式不满足要求。
-
输出多余信息(包括空格和换行符)
-
构造的方案操作次数与标准答案不同。
-
构造的方案不符合题目要求。
-
时间超限。
如果没有上述情况,你在该测试点获得满分。
保证 SPJ 占用不超过 100 ms , 10 MB 100\operatorname{ms},10\operatorname{MB} 100ms,10MB。
样例解释 1
一种操作过程如下:
ABBAA
ABABA
可以证明没有更优的方案。
样例解释 2
初始序列已经符合题目要求,直接输出一行 0 0 0 即可。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容