luogu#P8885. 「JEOI-R1」子序列
「JEOI-R1」子序列
题目背景
出题 | 标程 | 数据 | 验题 | 题解 |
---|---|---|---|---|
Pekemetier | cq_zry & lOlAKME | Pekemetier |
题目描述
给定一个仅包含 0
、1
和 ?
的字符串,你需要将字符串中的每个 ?
分别替换成 0
或 1
之一。也就是说替换成一个 字符串。求有多少种替换方案,使得替换后的字符串满足:恰好拥有奇数个不同的子序列(包含空串)的非空子串的个数为奇数。特别地,如果字符串中不包含 ?
,应将其自身视为唯一的替换方案。
每个数据点会给定一个字符串 ,然后每次对 的一个子串进行询问,答案对 取模。
输入格式
第一行一个整数 。
第二行一个长为 的字符串 ,仅包含 0
、1
和 ?
。
第三行一个整数 表示询问次数。
接下来 行,每行两个整数 表示对子串 进行一次询问。
输出格式
输出 行,每行一个整数表示答案,对 取模。
不存在合法方案则输出 0
。
5
100?1
5
1 5
1 4
2 5
3 4
1 3
1
0
1
1
1
20
1110??01001010?1?110
20
1 20
5 16
11 16
10 13
5 14
13 17
1 18
1 7
6 9
15 19
12 17
17 18
4 11
3 13
13 15
18 19
2 8
7 13
4 15
9 18
3
2
2
0
4
2
13
3
0
1
3
1
2
2
2
1
2
1
1
3
提示
【样例解释】
对于【样例#1】的第一个询问 1 5
,有 种替换方案,分别为字符串 10001
和 10011
。
其中 10001
有 个子串满足不同的子序列的个数为奇数:10001
,拥有 个不同的子序列; 和 均为 00
,都拥有 个不同的子序列。
而 10011
则拥有 个子串满足不同的子序列的个数为奇数,分别为 1001
、00
、0011
、11
。
10001
有奇数个子串满足子序列个数为奇数,因此计入答案;而 10011
有偶数个,因此不计入答案。
对于【样例#2】的第一个询问 1 20
, 有 个 ?
,因此有 种替换方案。
【数据范围】
本题采用捆绑测试。
特殊性质 | ||||
---|---|---|---|---|
不包含 ? |
||||
对于 的数据,满足 ,, 仅包含 0
、1
和 ?
。
【提示与说明】
子串:在原来的字符串中选出一段连续字符组成的字符串。一个长为 的字符串有 个子串。例如字符串 121
共有 个子串,分别为 1
、2
、1
、12
、21
、121
。注意在本题中,空串不算一个子串。
子序列:在原来的字符串中任意删去若干个字符(也可以不删)形成的的字符串。例如字符串 0110
拥有 个不同的子序列,分别为空串、0
、1
、00
、01
、10
、11
、010
、011
、110
、0110
。注意在本题中,空串也算一个子序列。