CF2187D.Cool Problem
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有两个整数常数 x 和 y。
对于一个长度为 n 的二进制字符串 r,我们定义它的生成数组为 c=[c0,c1,…,cn],其中 c0=0,并且对每个 1≤i≤n:
- 如果 ri=0,那么 ci=x+ci−1;
- 如果 ri=1,那么 ci=y−ci−1。
此外,我们定义 f(r)=i=1∑nci。
现在给定一个长度为 n 的不完整二进制字符串 s,其中有些字符缺失,用 ? 表示。若存在一种方式将 s 中的每个 ? 替换成 0 或 1,使得 f(s)=k,那么整数 k 被称为“cool”整数。
你的任务是计算所有 cool 整数的和,结果对 998244353 取模。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。每个测试用例的描述如下。
每个测试用例的第一行包含三个整数 n、x 和 y(1≤n≤105,1≤x,y≤106),分别表示字符串 s 的长度和两个给定的常数。
第二行包含长度为 n 的不完整二进制字符串 s(si∈{0,1,?})。
保证所有测试用例中 n 的总和不超过 105。
输出格式
对于每个测试用例,输出一个整数,表示所有 cool 整数之和,对 998244353 取模。
输入输出样例
输入#1
4 1 1 2 0 1 1 2 ? 3 7 5 ?0? 7 114514 191981 ?1?????
输出#1
1 3 100 8039591
说明/提示
在第一个测试用例中,字符串 s 已经确定,其生成数组为 [0,1]。因此 f(s)=1,唯一的 cool 整数为 1。
在第三个测试用例中,有四种方式补全字符串 s:
| s | 生成数组 | f(s) |
|---|---|---|
| 000 | [0,7,14,21] | 42 |
| 001 | [0,7,14,−9] | 12 |
| 100 | [0,5,12,19] | 36 |
| 101 | [0,5,12,−7] | 10 |
因此,所有 cool 整数之和为 42+12+36+10=100。