#ACSPX2025D. 改写
改写
题目描述
小可可在学习字符串算法!
一个长度为 的字符串 是回文的,当且仅当 对所有 均成立。例如 , 都是回文串,但 不是回文串。
给定一个字符串 ,把 分成若干个非空子段,使得每一个子段都不是回文的,同时最大化划分出的子段数目,请你输出最大划分数,无解则输出 −1。
子段的定义为:一个字符串保留任意连续字符后形成的字符串。
由于字符串 可能很长,我们将会按照 的形式给出整个字符串,具体含义见输入格式。
输入格式
第一行一个整数 表示数据组数。
对于每组数据,第一行输入一个数 表示极长连续相同字母段的数量。
接下来 行中,第 行包括一个 到 之间的小写字母 和一个整数 ,分别表示该段的数字以及长度,保证对于所有大于 的 ,均满足 c_{i−1} ̸= c_i。
输出格式
输出共 行,每行输出一个整数,表示最大的划分段数,若无解则输出 。
输入输出样例 1
5
2
b 1
a 1
1
b 4
7
a 2
b 2
a 1
b 2
a 1
b 1
a 1
5
a 2
b 1
a 2
c 2
a 2
3
a 1
b 1
a 1
1
-1
4
3
-1
样例1解释
对于第一组数据,序列为 ba,且只存在 ba 这一种划分方案,因此答案为 1。
对于第二组数据,序列为 bbbb,显然没有合法方案。
对于第三组数据,序列为 aabbabbaba,存在一种划分出四段的方案:aabb,ab,ba,ba,可以证明没有答案更优的划分方式。
对于第四组数据,序列为 aabaaccaa,存在一种划分出三段的方案:aaba,ac,caa,可以证明没有答案更优的划分方式。
对于第五组数据,序列为 aba,容易发现无论怎么划分,都至少有一个回文串,所以无解。
约定和数据范围
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
数据点 ,, , 。
ex_rewrite1.in ex_rewrite1.ans
ex_rewrite2.in ex_rewrite2.ans