#P50483. 「JOI 2018 Final」毒蛇越狱

「JOI 2018 Final」毒蛇越狱

题目描述

JOI 研究所有 2L2^L 条毒蛇,这些毒蛇编号为 0,1,,2L10, 1, \dots, 2^L-1。每条毒蛇从头到尾被分成 LL 段,每段的颜色为蓝、红中的一种。对于毒蛇 ii,令 i=k=1Lck×2Lk,(0ck1)i=\sum_{k=1}^L c_k\times 2^{L-k}, (0≤c_k≤1)ii 的二进制展开,若 ck=0c_k=0,则毒蛇 ii 的第 kk 段是蓝色的,否则是红色的。

每条毒蛇有一个 0099 的整数表示它的毒性。给出一个长度为 2L2^L 的字符串,其中字符均在 09 的范围内,第 ii 位字符表示第 i1i-1 条毒蛇的毒性。

这些毒蛇移动速度非常快,所以他们经常从 JOI 研究所逃跑,因此,研究所附近的住户投诉时常看见从研究所逃出的毒蛇。

研究所整理出了 QQ 天来住户的举报清单,第 dd 天的收到的举报是一个长度为 LL 且仅包含 0, 1, ? 的字符串 TdT_d

如果 TdT_d 的第 jj 个字符为 0,这意味着逃跑毒蛇的第 jj 段是蓝色的;
如果 TdT_d 的第 jj 个字符为 1,这意味着逃跑毒蛇的第 jj 段是红色的;
如果 TdT_d 的第 jj 个字符为 ?,这意味着没有人注意到逃跑毒蛇的第 jj 段是什么颜色的。

研究所保证投诉均为准确的信息,并且根据这些信息,JOI 研究所每天会将逃跑的毒蛇全部捕获回来,因此会发生同一条毒蛇在不同日子逃跑的情况。

为了估计逃跑的毒蛇的风险,JOI 实验室的执行主任 K 教授想知道所有可能逃跑的毒蛇的毒性之和。你的任务是编写一个程序,给出 QQ 天的投诉清单,计算每天可能从实验室逃跑的毒蛇的毒性之和。

注意本题空间限制较小。

输入格式

从标准输入中读取数据。

第一行包括两个整数 L,QL, Q,表示毒蛇的颜色段数与收到投诉的天数。

第二行包括一个长度为 2L2^L 的字符串 SS,描述毒蛇的毒性。

接下来 QQ 行,第 d+2d+2 行有长为 LL 的字符串,表示 TdT_d

输出格式

输出数据到标准输出中。

输出共 QQ 行,每行一个整数,表示所有可能逃跑的毒蛇的毒性之和。

样例 1

3 5
12345678
000
0??
1?0
?11
???
1
10
12
12
36

样例中 L=3L=3,共有 23=82^3=8 条毒蛇,每条毒蛇分成三段,共有 55 天收到投诉。

第一天:逃跑的毒蛇只可能是第 00 条毒蛇,毒性之和为 11。 第二天:逃跑的毒蛇只可能是第 0,1,2,30, 1, 2, 3 条毒蛇,毒性之和为 1010。 第三天:逃跑的毒蛇只可能是第 4,64, 6 条毒蛇,毒性之和为 1212。 第四天:逃跑的毒蛇只可能是第 3,73, 7 条毒蛇,毒性之和为 1212。 第五天:逃跑的毒蛇只可能是第 0,1,2,3,4,5,6,70, 1, 2, 3, 4, 5, 6, 7 条毒蛇,毒性之和为 3636

4 8
3141592653589793
0101
?01?
??1?
?0??
1?00
01?1
??10
????
9
18
38
30
14
15
20
80

数据范围与提示

Subtask # 分值 LL QQ
1 5 L10L\le 10 Q1000Q\le 1000
2 7 -
3 10 L13L\le 13
4 53 - Q5×104Q\le 5\times 10^4
5 25 -

对于所有输入数据,有 1L20,1Q1061≤L≤20, 1≤Q≤10^6