A93184.「NOI2025」三目运算符

提高+/省选-

NOI

通过率:0%

时间限制:2.00s

内存限制:512MB

题目描述

对于一个长度为 nn (n3)(n \geq 3)0101S=s1snS = s_1 \ldots s_n,定义变换 T=f(S)=t1tnT = f(S) = t_1 \ldots t_n 如下:

ti={si,i2,si,i3 且 si2=0,si1,i3 且 si2=1.t_i = \begin{cases} s_i, & i \leq 2, \\ s_i, & i \geq 3 \text{ 且 } s_{i-2} = 0, \\ s_{i-1}, & i \geq 3 \text{ 且 } s_{i-2} = 1. \end{cases}

定义变换 ff不动点如下:若 0101TT 满足 f(T)=Tf(T) = T,则称 TT 为变换 ff 的不动点。

fk(S)f^k(S)SS 经过 kk 次变换得到的串。特别地,记 f0(S)=Sf^0(S) = S。求最小的自然数 kk,使得 fk(S)f^k(S) 为变换 ff 的不动点,即满足 fk+1(S)=fk(S)f^{k+1}(S) = f^k(S) 的最小的自然数 kk。可以证明,一定存在自然数 kk 使得 fk(S)f^k(S) 为变换 ff 的不动点。

小 Z 觉得这个问题过于简单,因此他增加了 qq 次修改操作。第 ii (1iq)(1 \leq i \leq q) 次修改会给定两个正整数 li,ril_i, r_i (1lirin)(1 \leq l_i \leq r_i \leq n),然后将区间 [li,ri][l_i, r_i] 内的所有原有的 00 替换为 11,所有原有的 11 替换为 00。你需要对初始时及每次修改后的字符串 SS,求出最小的自然数 kk,使得 fk(S)f^k(S) 为变换 ff 的不动点。

输入格式

从文件 ternary.in 中读入数据。

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,tc, t,分别表示测试点编号与测试数据组数。c=0c = 0 表示该测试点为样例。

接下来依次输入每组测试数据,对于每组测试数据:

第一行包含两个正整数 n,qn, q,分别表示 SS 的长度和修改次数。

第二行包含一个长度为 nn0101S=s1snS = s_1 \ldots s_n,表示初始时的字符串。

i+2i + 2 (1iq)(1 \leq i \leq q) 行包含两个正整数 li,ril_i, r_i,表示一次修改操作。

输出格式

输出到文件 ternary.out 中。

对于每组测试数据,设初始时的答案为 k0k_0,第 ii (1iq)(1 \leq i \leq q) 次修改后的答案为 kik_i,输出一行一个正整数,表示 i=0q((i+1)×ki)\oplus_{i=0}^{q} ((i + 1) \times k_i),其中 \oplus 表示二进制按位异或

输入输出样例

  • 输入#1

    0 2
    5 2
    11010
    3 3
    2 2
    7 3
    1010100
    7 7
    2 4
    1 2
    

    输出#1

    2
    4
    
首页