#ACSPX2025D. 改写

改写

题目描述

小可可在学习字符串算法!

一个长度为 mm 的字符串 rr 是回文的,当且仅当 ri=rm+1ir_i = r_{m+1−i} 对所有 1im1 ≤ i ≤ m 均成立。例如 aaabaaaaaabaaa, abbaabba 都是回文串,但 aaabaaaaabaa 不是回文串。

给定一个字符串 ss,把 ss 分成若干个非空子段,使得每一个子段都不是回文的,同时最大化划分出的子段数目,请你输出最大划分数,无解则输出 −1。

子段的定义为:一个字符串保留任意连续字符后形成的字符串。

由于字符串 ss 可能很长,我们将会按照 c,lenc, len 的形式给出整个字符串,具体含义见输入格式。

输入格式

第一行一个整数 TT 表示数据组数。

对于每组数据,第一行输入一个数 nn 表示极长连续相同字母段的数量。

接下来 nn 行中,第 ii 行包括一个 aazz 之间的小写字母 cic_i 和一个整数 lenilen_i,分别表示该段的数字以及长度,保证对于所有大于 11ii,均满足 c_{i−1} ̸= c_i

输出格式

输出共 TT 行,每行输出一个整数,表示最大的划分段数,若无解则输出 1−1

输入输出样例 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,容易发现无论怎么划分,都至少有一个回文串,所以无解。

约定和数据范围

数据点 11T=10T = 10, 1n31 ≤ n ≤ 3, 1leni21 ≤ len_i ≤ 2

数据点 22T=10T = 10, 1n31 ≤ n ≤ 3, 1leni1091 ≤ len_i ≤ 10^9

数据点 3,43, 4T=10T = 10, 1n1501 ≤ n ≤ 150, 1leni21 ≤ len_i ≤ 2

数据点 5,65, 6T=10T = 10, 1n1501 ≤ n ≤ 150, 1leni1091 ≤ len_i ≤ 10^9

数据点 797 ∼ 9T=10T = 10, 1n2.5×1031 ≤ n ≤ 2.5 × 10^3 , 1leni21 ≤ len_i ≤ 2

数据点 101210 ∼ 12T=10T = 10, 1n2.5×1031 ≤ n ≤ 2.5 × 10^3 , 1leni1091 ≤ len_i ≤ 10^9

数据点 131613 ∼ 16T=10T = 10, 1n1051 ≤ n ≤ 10^5 , 1leni21 ≤ len_i ≤ 2

数据点 172017 ∼ 20T=10T = 10, 1n1051 ≤ n ≤ 10^5 , 1leni1091 ≤ len_i ≤ 10^9

ex_rewrite1.in  ex_rewrite1.ans

ex_rewrite2.in  ex_rewrite2.ans

ex_rewrite3.in  ex_rewrite3.ans

ex_rewrite4.in  ex_rewrite4.ans