开始: 2026-10-03 11:00:00

【集训01】订正

结束: 2026-10-03 23:00:00
当前  2026-11-04 11:35:09  类型: IOI  状态: 已经结束 

P6. 控制面板(panel)
描述

有一个控制面板,上面有 K 个灯泡排成一排。每个灯泡有两种状态:亮(用 `1` 表示)或灭(用 `0` 表示)。面板的初始状态由一个长度为 K 的 0/1 字符串 S 给出。

有 N 种操作,编号为 1 到 N。每种操作必须执行一次,且只能执行一次。这 N 种操作会在 N 天内全部执行完毕,但每天执行哪种操作的顺序已经丢失了。

对于第 i 种操作,题目给出三个长度为 K 的 0/1 字符串 A_i, B_i, X_i:

- **执行条件**:在执行操作 i 之前,面板必须满足:

  - 对于所有 j,如果 A_i 的第 j 位是 `1`,则第 j 个灯泡必须亮着;

  - 对于所有 j,如果 B_i 的第 j 位是 `1`,则第 j 个灯泡必须灭着。

  - (如果 A_i 和 B_i 在同一位都是 `1`,则这个操作永远无法执行。)

- **执行效果**:执行操作 i 时,对于所有 j,如果 X_i 的第 j 位是 `1`,则翻转第 j 个灯泡的状态(亮变灭,灭变亮)。

小 Z 记录了每天操作**之后**亮着的灯泡数量。设第 t 天操作后的亮灯数为 C_t,则他得到了一个长度为 N 的序列 C_1, C_2, \ldots, C_N。

这份记录会接受 Q 次**订正**。第 q 次订正给出两个整数 T_q, Y_q,表示把**当前记录**中第 T_q 天的值改为 Y_q。

**注意:订正是累积的。** 即第 q 次订正是在前 q-1 次订正都已经生效的基础上进行的,而不是每次从最初的记录重新修改。

每次订正之后,你需要回答:有多少种操作执行顺序,能够产生**当前**的记录序列 C?

这里,“操作执行顺序”指的是 (1, 2, \ldots, N) 的一个排列 (p_1, p_2, \ldots, p_N),表示第 1 天执行操作 p_1,第 2 天执行操作 p_2,……,第 N 天执行操作 p_N

一个排列与当前记录 C 相容,当且仅当:

- 从初始状态 S 开始;

- 第 t 天执行操作 p_t 前,面板状态满足操作 p_t 的执行条件;

- 第 t 天执行操作 p_t 后,亮灯数恰好等于 C_t(对于所有 1 \le t \le N)。

答案对 998244353 取模。

**注意**:即使两个操作的条件和效果完全相同,只要它们的编号不同,交换它们也视为不同的执行顺序。

输入

- 第 1 行三个整数 N, K, Q;

- 第 2 行一个长度为 K 的 0/1 字符串 S,表示初始状态;

- 第 3 行 N 个整数 C_1, C_2, \ldots, C_N,表示初始记录;

- 接下来 N 行,第 i 行三个长度为 K 的 0/1 字符串 A_i, B_i, X_i,描述第 i 种操作;

- 接下来 Q 行,每行两个整数 T_q, Y_q,表示一次订正。


输出

输出 Q 行,每行一个整数,表示每次订正后的合法顺序数(对 998244353 取模)。

样例

输入

3 3 4
010
2 1 2
010 000 100
100 000 001
000 001 010
2 3
2 1
1 0
1 2

输出

0
1
0
1

输入

6 5 8
10100
3 2 3 4 3 2
10000 00010 01001
00100 00000 10010
00000 01000 00101
01001 10000 00011
00010 00100 11000
00000 00001 01110
3 4
6 1
1 2
4 5
5 0
2 3
3 2
6 2

输出

0
0
0
0
0
0
0
0

输入

1 1 1
0
0
0 0 1
1 1

输出

1
提示

- 1 \le N \le 9

- 1 \le K \le 9

- 1 \le Q \le 10^5

- S, A_i, B_i, X_i 均为长度 K 的 0/1 字符串

- 0 \le C_t \le K

- 1 \le T_q \le N,0 \le Y_q \le K


提交

题目参数
时间限制 1 秒
内存限制 128 MB
提交