垃圾脑瘫的坑

该题解为残缺品,笔者自己也不是很懂

CF1327F AND Segments题解

题目描述

你有三个整数 (n, k, m) 以及 (m) 个限制 ((l_1, r_1, x_1), (l_2, r_2, x_2), ldots, (l_m, r_m, x_m))

计算满足下列条件的,长度为 (n) 的序列 (a) 的个数:

  • 对于每个 (1 le i le n)(0 le a_i lt 2 ^ k)

  • 对于每个 (1 le i le m),数字的按位与 (a[l_i] ext{ and } a_[l_i + 1] ext{ and } ldots ext{ and } a[r_i] = x_i)

两个序列 (a, b) 被认为是不同的,当且仅当存在一个位置 (i) 满足 (a_i eq b_i)。 由于答案可能过大,请输出其对 (998 244 353) 取模的结果。

解题思路

CF1327F AND Segments题解

题目描述

你有三个整数 (n, k, m) 以及 (m) 个限制 ((l_1, r_1, x_1), (l_2, r_2, x_2), ldots, (l_m, r_m, x_m))

计算满足下列条件的,长度为 (n) 的序列 (a) 的个数:

  • 对于每个 (1 le i le n)(0 le a_i lt 2 ^ k)

  • 对于每个 (1 le i le m),数字的按位与 (a[l_i] ext{ and } a_[l_i + 1] ext{ and } ldots ext{ and } a[r_i] = x_i)

两个序列 (a, b) 被认为是不同的,当且仅当存在一个位置 (i) 满足 (a_i eq b_i)。 由于答案可能过大,请输出其对 (998 244 353) 取模的结果。

解题思路

对于每一位,我们可以分开考虑。

假设考虑到第(a)位。

对于每段区间,若(x_i)对应的位为(1),那么整段区间这位对应的数都是(1),用差分数组维护

对于(x_i)(0)的区间,考虑用DP求解方案数。

为转移方便,我们维护一个(pos_i)表示(i)之前的第一个0至少填在(pos_i)这个位置,可以参考代码理解

(f_{i,j})表示从低到高位填到第(i)位,最后一个0的位置为(j)时的方案数,分三种情况转移

  1. (j<pos_i),则(f_{i,j}=0),这种情况不可能
  2. (pos_ileq j leq i-1),则(f_{i,j}=f_{i-1,j}),因为(i)这里没有决策,只能填(1)
  3. (i=j),则(f_{i,i}=sum_{x=pos[i-1]}^{i-1}f_{i-1,x})
原文地址:https://www.cnblogs.com/CHK666/p/15355482.html