#P17140. Three Colors
Three Colors
1004. Three Colors
题目描述
小 C 在便利店购物,店内共有三种类型的物品,分别记为 。商店中的商品按顺序摆放,形成一个长度为 的字符串 ,其中 表示第 件商品的类型。
小 C 想从指定的一段商品中挑选一段 连续 的商品送给小 X。
现在有 次询问,每次给出一个区间 。你需要在区间 内选择一个连续子区间 [l',r'](满足 l\le l'\le r'\le r)。
设该子区间内三种商品出现次数分别为 $\mathrm{cnt}_\texttt{A},\mathrm{cnt}_\texttt{B},\mathrm{cnt}_\texttt{C}$,其中未出现的商品类型出现次数视为 。要求三种商品的出现次数两两不同,即 $\mathrm{cnt}_\texttt{A}\neq \mathrm{cnt}_\texttt{B}$ 且 $\mathrm{cnt}_\texttt{A}\neq \mathrm{cnt}_\texttt{C}$ 且 $\mathrm{cnt}_\texttt{B}\neq \mathrm{cnt}_\texttt{C}$。
对于每次询问,输出一个满足条件且长度最大的子区间 [l',r']。若存在多个长度最大的答案,输出任意一个即可;若不存在满足条件的子区间,则输出 0 0。
输入格式
本题强制在线。
第一行包含一个整数 ,表示商品的数量。
第二行包含一个长度为 的字符串 ,保证仅由大写字母 组成。
第三行包含一个整数 ,表示询问的次数。
接下来 行,每行包含两个整数 $x', y'\ (0\leq x', y'\leq 10^9)$。你需要通过以下规则解密得到真实的查询区间 :
设 和 为解密后的临时端点,则:
- $x = ((x' \oplus \text{last\_ans}) - 1) \bmod n + 1$,
- $y = ((y' \oplus \text{last\_ans}) - 1) \bmod n + 1$。
其中 表示按位异或操作。此处约定 。
最终真实的查询区间端点为 ,。
变量 初始值为 。在每次询问后, 将被更新为本次输出的满足条件的最大子区间长度,即 \text{last\_ans} = r' - l' + 1。若不存在满足条件的子区间(即输出为 0 0),则视长度为 ,即 。
保证解密后的真实区间满足 。
输出格式
输出共 行。
对于每次询问,输出两个用空格分隔的整数 l' 和 r',表示你选择的满足条件且长度最大的连续子区间的左右端点。若有多个长度相同的合法答案,输出任意一个;若无解,请输出 0 0。
样例输入
8
BCAABCCC
4
1 8
6 2
7 4
2 0
样例输出
2 8
2 4
5 7
0 0
提示
初始 。
第一次询问: 异或后得 ,子串 。最长合法区间为 ,其中 ,,,输出 2 8,。
第二次询问: 异或后得 ,子串 。最长合法区间长度为 3,可取 (或 ),其中 ,,,输出 2 4,。
第三次询问: 异或后得 ,子串 。最长合法区间为 ,其中 ,,,输出 5 7,。
第四次询问: 异或后得 ,子串 。不存在满足 ,, 两两不同的子区间,输出 0 0,。
真实区间依次为 。
来源:2026杭电多校-测试专用(山西实验) 原题链接:http://acm.hdu.edu.cn/contest/problem_show.php?cid=1234&pid=1004 ⚠ 本题为 Special Judge。官方数据中的 .out 多为评测机判定输出(如 AC/OK/Correct/yes),导入后需自行提供 checker 方可正确评测。