QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 512 MB Total points: 100
[+16]

# 9647. 数位 DP

统计

题目背景

L 曾经出了这样一个题:

  • 给定长度为 4 的整数序列 c,求是否存在长度为 4 的整数序列 a 满足 0aici(((a1anda2)xora3)ora4=m

C 看到后觉得这个数位 DP 题非常板,很没意思。小 L 又修改上述问题的位运算的顺序,出了很多个题。

C 忍不了了:“你能不能别再出模板数位 DP 题了?”

L 只能把这一堆题交给了你。不过为了增加挑战性,现在你需要对所有可能的 ci 计算出答案并求和。

题目描述

给定长度为 n1 的字符串 s,对于一个长度为 n 的非负整数序列 a,定义其生成序列 b 为:

  • b1=a1
  • 对于 i>1
    • si1=A,则 bi=bi1andai
    • si1=O,则 bi=bi1orai
    • si1=X,则 bi=bi1xorai

给定非负整数 k。接下来 q 组询问,每次给定一个 m,求有多少长度为 n 的整数序列 c 满足:

  • 对于 1in,满足 0ci<2k
  • 存在至少一个长度为 n 的整数序列 a 满足:
    • 对于 1in,满足 0aici
    • 对于 a 的生成序列 b,满足 bn=m

由于答案很大,你只需要输出答案对 232 取模的结果。

输入格式

第一行三个整数 n,k,q

第二行一个长度为 n1 的字符串 s

接下来 q 行,每行一个询问的 m

输出格式

输出 q 行,每行一个非负整数,表示答案对 232 取模的结果。

样例

样例输入 #1
3 1 2
OA
0
1
样例输出 #1
8
3
样例输入 #2
4 2 2
XOA
1
2
样例输出 #2
189
112
样例输入 #3
4 2 3
XAO
1
2
3
样例输出 #3
237
176
143
样例输入 #4
10 10 3
AOOXOAOXA
749
666
135
样例输出 #4
4239261913
1948492800
2799056799

提示

本题使用捆绑测试,你只有通过一个子任务的所有测试点,才能获得这个子任务的分数

子任务编号 n k q 特殊性质 分值 依赖
1 4 5 200 10
2 20 8 20 10
3 200 16 1 10
4 200 16 200 10 1,2,3
5 200 30 1 popcount(m)16 10 3
6 1000 30 1000 s 不包含 A 10
7 50 30 50 10 2
8 1000 30 1 10 5
9 200 30 200 10 4,5,7
10 1000 30 1000 10 6,8,9

对于 100 的数据,2n10001q10001k300m<2k