#C2026XSR3D. 翻转(flip)
翻转(flip)
翻转(flip)
题目描述
苗苗在实验室中调试一排开关。开关的当前状态可以看作一个长度为 的 01 字符串 ,目标状态为另一个长度为 的 01 字符串 。为了方便描述,字符串下标均从 开始。
苗苗可以进行一种自动翻转操作:选择一个整数 ,满足 ,然后对所有 执行
也就是说,苗苗每次可以翻转 中一个长度恰好为 的连续段。
在使用自动翻转操作之前,苗苗还可以手动改变若干个字符。一次手动改变可以选择一个位置 ,并执行
苗苗想知道:至少需要手动改变多少个字符,才能在此之后通过若干次自动翻转操作,使得 变为 。
实验过程中会发生 次改变。第 次改变给出一个区间 ,苗苗会先对当前的 中所有 的位置执行
这个改变是有后效性的,也就是说它会保留到之后的询问中。每次改变之后,你都需要回答上面的问题。
注意,询问中提到的“手动改变若干个字符”只用于计算这一次答案,不会真正修改之后的字符串 。
形式化地,设当前字符串为 。你需要求最小的整数 ,使得存在一个集合 ,满足 ,先对所有 翻转 ,再经过若干次长度为 的连续段翻转后,可以使 。
输入格式
从文件 flip.in 中读入数据。
第一行一个整数 ,表示测试数据组数。
对于每组测试数据:
第一行三个整数 。
第二行一个长度为 的 01 字符串 。
第三行一个长度为 的 01 字符串 。
接下来 行,每行两个整数 ,表示一次对当前字符串 的区间翻转。
输出格式
输出到文件 flip.out 中。
对于每组测试数据,输出 行,每行一个整数,表示对应改变之后的答案。
输入输出样例 #1
输入 #1
1
5 3 1
10001
11110
2 3
输出 #1
1
样例 #1 解释
样例中,第一次改变之后,当前字符串变为 11101。
若先把第 个字符从 1 改成 0,字符串变为 11001,再翻转区间 ,即可得到目标字符串 11110。可以证明不手动改变字符无法做到,因此答案为 。
输入输出样例 #2
输入 #2
1
4 1 3
0101
1010
1 4
2 2
3 4
输出 #2
0
0
0
样例 #2 解释
因为 ,每次自动翻转可以只改变一个字符,所以每次答案都是 。
数据范围
对于所有数据,满足 ,,,。
本题共 个测试点,每个测试点 分。
| 测试点编号 | 特殊性质 | ||
|---|---|---|---|
| 无 | |||
| 无 | |||
相关
在下列比赛中: