A93184.「NOI2025」三目运算符
提高+/省选-
通过率:0%
时间限制:2.00s
内存限制:512MB
题目描述
对于一个长度为 n (n≥3) 的 01 串 S=s1…sn,定义变换 T=f(S)=t1…tn 如下:
ti=⎩⎨⎧si,si,si−1,i≤2,i≥3 且 si−2=0,i≥3 且 si−2=1.
定义变换 f 的不动点如下:若 01 串 T 满足 f(T)=T,则称 T 为变换 f 的不动点。
记 fk(S) 为 S 经过 k 次变换得到的串。特别地,记 f0(S)=S。求最小的自然数 k,使得 fk(S) 为变换 f 的不动点,即满足 fk+1(S)=fk(S) 的最小的自然数 k。可以证明,一定存在自然数 k 使得 fk(S) 为变换 f 的不动点。
小 Z 觉得这个问题过于简单,因此他增加了 q 次修改操作。第 i (1≤i≤q) 次修改会给定两个正整数 li,ri (1≤li≤ri≤n),然后将区间 [li,ri] 内的所有原有的 0 替换为 1,所有原有的 1 替换为 0。你需要对初始时及每次修改后的字符串 S,求出最小的自然数 k,使得 fk(S) 为变换 f 的不动点。
输入格式
从文件 ternary.in 中读入数据。
本题包含多组测试数据。
输入的第一行包含两个非负整数 c,t,分别表示测试点编号与测试数据组数。c=0 表示该测试点为样例。
接下来依次输入每组测试数据,对于每组测试数据:
第一行包含两个正整数 n,q,分别表示 S 的长度和修改次数。
第二行包含一个长度为 n 的 01 串 S=s1…sn,表示初始时的字符串。
第 i+2 (1≤i≤q) 行包含两个正整数 li,ri,表示一次修改操作。
输出格式
输出到文件 ternary.out 中。
对于每组测试数据,设初始时的答案为 k0,第 i (1≤i≤q) 次修改后的答案为 ki,输出一行一个正整数,表示 ⊕i=0q((i+1)×ki),其中 ⊕ 表示二进制按位异或。
输入输出样例
输入#1
0 2 5 2 11010 3 3 2 2 7 3 1010100 7 7 2 4 1 2
输出#1
2 4