#P16117. [USTCPC 2026] Evil Counting Problem

[USTCPC 2026] Evil Counting Problem

题目背景

“呜哇——!怎么会有这么奇怪的数组啊!”

克露丝卡尔酱盯着黑板上写满的 +1+11-1,整个人都不好了。

“前辈前辈!”后辈拽着她的袖子,“如果给你一个区间,里面的数字可以随便重新排列,那有多少种排法能让所有连续子段的乘积加起来正好等于 kk 呢?”

面对那双闪闪发亮的眼睛,克露丝卡尔酱只能硬着头皮接下了这个挑战。

唉,今天的社团活动,似乎又不太平静呢……

题目描述

给定长度为 nn 的数组 aa,每个元素都是 ±1\pm 1 之一。

给定常数 kk 以及 qq 次询问,每次询问指定 l,rl,r,计算:假如你可以任意排列 [l,r][l,r] 下标范围内的元素,有多少种排列方式,使得新数组(长度仍为 nn)的所有非空子段乘积之和(即 ijt[i,j]at\sum_{i\le j}\prod_{t\in[i,j]}a_t)为 kk。结果对 998244353998244353 取模。

注意:即使两个不同的排列得到的数组完全相同,也将它们视为不同的排列。

输入格式

本题有多组测试数据。

首先输入一行,包含一个整数 TT1T1051\le T\le 10^5),表示测试数据组数。

每组数据首先输入一行,包含三个整数,分别表示数组长度 nn (1n1051\le n\le 10^5)、常数 kk (kn(n+1)2\lvert k\rvert\le\frac{n(n+1)}{2})、询问总数 qq (1q1051\le q\le 10^5)。

接下来输入一行,包含 nn 个整数,其中第 ii 个整数表示 aia_i,满足 ai=1\lvert a_i\rvert=1

接下来输入 qq 行,每行包含两个整数,其中第 ii 行的两个整数分别表示第 ii 次查询的 li,ril_i,r_i (1lirin1\le l_i\le r_i\le n)。

保证 n,q105\sum n,\sum q\le 10^5

输出格式

输出 q\sum q 行,每行一个整数,表示询问结果。

2
5 -3 3
1 -1 -1 1 -1
1 4
2 5
3 3
3 6 1
1 -1 -1
1 3
8
12
0
0

提示

对于第一组样例的第一次询问,必须将前四个元素排列为 (1,1,1,1)(1,-1,1,-1)(1,1,1,1)(-1,1,-1,1),共有 88 种排列方式满足要求。