#3097. [科大国创杯小学组 2025] 改写

[科大国创杯小学组 2025] 改写

题目描述

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

一个长度为 mm 的字符串 rr 是回文的,当且仅当 ri=rm+1−ir_i = r_{m+1-i} 对所有 1≤i≤m1 \leq i \leq m 均成立。例如 aaabaaa\tt{aaabaaa},abba\tt{abba} 都是回文串,但 aaabaa\tt{aaabaa} 不是回文串。

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

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

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

输入格式

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

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

接下来 nn 行中,第 ii 行包括一个 aa 到 zz 之间的小写字母 cic_i 和一个整数 lenilen_i,分别表示该段的数字以及长度,保证对于所有大于 11 的 ii,均满足 ci−1≠cic_{i-1} \neq c_i。

输出格式

输出共 TT 行,每行输出一个整数,表示最大的划分段数,若无解则输出 −1-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
-1
4
3
-1

说明/提示

样例解释

  • 对于第一组数据,序列为 ba\tt{ba},且只存在 ba\tt{ba} 这一种划分方案,因此答案为 11。
  • 对于第二组数据,序列为 bbbb\tt{bbbb},显然没有合法方案。
  • 对于第三组数据,序列为 aabbabbaba\tt{aabbabbaba},存在一种划分出四段的方案: aabb\tt{aabb},ab\tt{ab},ba\tt{ba},ba\tt{ba},可以证明没有答案更优的划分方式。
  • 对于第四组数据,序列为 aabaaccaa\tt{aabaaccaa},存在一种划分出三段的方案: aaba\tt{aaba},ac\tt{ac},caa\tt{caa},可以证明没有答案更优的划分方式。
  • 对于第五组数据,序列为 aba\tt{aba},容易发现无论怎么划分,都至少有一个回文串,所以无解。

约定和数据范围

  • 数据点 11,T=10T = 10,1≤n≤31 \leq n \leq 3,1≤leni≤21 \leq len_i \leq 2。
  • 数据点 22,T=10T = 10,1≤n≤31 \leq n \leq 3,1≤leni≤1091 \leq len_i \leq 10^9。
  • 数据点 3,43, 4,T=10T = 10,1≤n≤1501 \leq n \leq 150,1≤leni≤21 \leq len_i \leq 2。
  • 数据点 5,65, 6,T=10T = 10,1≤n≤1501 \leq n \leq 150,1≤leni≤1091 \leq len_i \leq 10^9。
  • 数据点 7∼97 \sim 9,T=10T = 10,1≤n≤2.5×1031 \leq n \leq 2.5 \times 10^3,1≤leni≤21 \leq len_i \leq 2。
  • 数据点 10∼1210 \sim 12,T=10T = 10,1≤n≤2.5×1031 \leq n \leq 2.5 \times 10^3,1≤leni≤1091 \leq len_i \leq 10^9。
  • 数据点 13∼1613 \sim 16,T=10,1≤n≤105,1≤leni≤2T = 10, 1 \leq n \leq 10^5, 1 \leq len_i \leq 2。
  • 数据点 17∼2017 \sim 20,T=10,1≤n≤105,1≤leni≤109T = 10, 1 \leq n \leq 10^5, 1 \leq len_i \leq 10^9。