CF2187D.Cool Problem

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有两个整数常数 xxyy

对于一个长度为 nn 的二进制字符串 rr,我们定义它的生成数组为 c=[c0,c1,,cn]c=[c_0,c_1,\ldots,c_n],其中 c0=0c_0=0,并且对每个 1in1 \le i \le n

  • 如果 ri=0r_i=\mathtt{0},那么 ci=x+ci1c_i=x+c_{i-1}
  • 如果 ri=1r_i=\mathtt{1},那么 ci=yci1c_i=y-c_{i-1}

此外,我们定义 f(r)=i=1ncif(r)=\sum\limits_{i=1}^n c_i

现在给定一个长度为 nn 的不完整二进制字符串 ss,其中有些字符缺失,用 ?\mathtt{?} 表示。若存在一种方式将 ss 中的每个 ?\mathtt{?} 替换成 0\mathtt{0}1\mathtt{1},使得 f(s)=kf(s)=k,那么整数 kk 被称为“cool”整数。

你的任务是计算所有 cool 整数的和,结果对 998244353998\,244\,353 取模。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。每个测试用例的描述如下。

每个测试用例的第一行包含三个整数 nnxxyy1n1051 \le n \le 10^51x,y1061 \le x,y \le 10^6),分别表示字符串 ss 的长度和两个给定的常数。

第二行包含长度为 nn 的不完整二进制字符串 sssi{0,1,?}s_i \in \{\mathtt{0},\mathtt{1},\mathtt{?}\})。

保证所有测试用例中 nn 的总和不超过 10510^5

输出格式

对于每个测试用例,输出一个整数,表示所有 cool 整数之和,对 998244353998\,244\,353 取模。

输入输出样例

  • 输入#1

    4
    1 1 2
    0
    1 1 2
    ?
    3 7 5
    ?0?
    7 114514 191981
    ?1?????

    输出#1

    1
    3
    100
    8039591

说明/提示

在第一个测试用例中,字符串 ss 已经确定,其生成数组为 [0,1][0, 1]。因此 f(s)=1f(s)=1,唯一的 cool 整数为 11

在第三个测试用例中,有四种方式补全字符串 ss

ss 生成数组 f(s)f(s)
000\mathtt{000} [0,7,14,21][0, 7, 14, 21] 4242
001\mathtt{001} [0,7,14,9][0, 7, 14, -9] 1212
100\mathtt{100} [0,5,12,19][0, 5, 12, 19] 3636
101\mathtt{101} [0,5,12,7][0, 5, 12, -7] 1010

因此,所有 cool 整数之和为 42+12+36+10=10042+12+36+10=100

首页