#HK4978. 「POI 2024/2025 R2」Podział na anagramy

「POI 2024/2025 R2」Podział na anagramy

题目描述

题目译自 XXXII Olimpiada Informatyczna – II etap Podział na anagramy

Bajtazar 经营一家谜题商店,店里一款热门谜题是一个由 nn 个小写英文字母组成的字符串。玩家需将这个字符串巧妙切割成若干区间,每区间必须是回文字符串的字母重排,即通过重排字母可形成回文字符串。回文字符串是指从左到右和从右到左读都相同的字符串,例如 abba 是回文字符串,其字母重排包括 aabb、abab、abba、baab、baba、bbaa;radar 也是回文字符串,其字母重排如 drara、radra。

Bajtazar 希望切割后最短区间的长度尽可能大。你的任务是找出最短区间的最大可能长度,并提供一个实现此长度的切割方案。

输入格式

第一行包含一个整数 nn (1≤n≤200000)(1 \leq n \leq 200000),表示字符串长度。

第二行包含一个由 nn 个小写英文字母(a,b,…,z\texttt{a}, \texttt{b}, \ldots, \texttt{z})组成的字符串,描述 Bajtazar 的谜题。

输出格式

第一行包含一个正整数 dd,表示满足题目条件的切割中最短区间的最大长度。

第二行包含一个整数 mm (1≤m≤n)(1 \leq m \leq n),表示最短区间长度为 dd 的切割中的区间数。

接下来的 mm 行描述区间,第 ii 行包含两个整数 ℓi,ri\ell_i, r_i (1≤ℓi≤ri≤n)(1 \leq \ell_i \leq r_i \leq n),表示包含从第 ℓi\ell_i 到第 rir_i 位字母(含两端)的区间。需满足:对于 1≤i<m1 \leq i < m,ri+1=ℓi+1r_i + 1 = \ell_{i+1},且 ℓ1=1\ell_1 = 1,rm=nr_m = n。

保证输入字符串可切割成回文字符串的字母重排。若存在多个最优切割方案,输出任意一种。

10
dababeaecc

5
2
1 5
6 10

区间 dabab 和 eaecc 是回文字符串的字母重排,分别可重排为 badab 和 ceaec(均为回文)。

附加样例

  1. n=10n=10,输入字符串为 ababcbbbac,最短区间长度 d=3d=3。
  2. n=4000n=4000,输入字符串本身是回文字符串的字母重排,最短区间长度 d=4000d=4000。
  3. n=199996n=199996,输入字符串由字母 a 重复 4999949999 次、b 重复 4999949999 次,依此类推至 d,最短区间长度 d=49999d=49999。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 n≤10n \leq 10 88
22 n≤300n \leq 300 1313
33 n≤4000n \leq 4000 1818
44 仅含字母 a 和 b 1212
55 仅含字母 a 到 j 2121
66 无附加限制 2828