Gravatar
小福鑫
积分:646
提交:113 / 253
×

提示!

该题解未通过审核,建议分享者本着启发他人,照亮自己的初衷以图文并茂形式完善之,请勿粘贴代码。

以下提供三种模板供您选择,发布题解时请删除模板中提示语等多余文字。

【模板一:多解法题解模板】

一、 解法概览

解法 时间复杂度 空间复杂度 适用场景
解法一:[名称] O(?) O(?) [场景描述]
解法二:[名称] O(?) O(?) [场景描述]
解法三:[名称] O(?) O(?) [场景描述]

二、 详细解析

解法一:[名称,如:暴力搜索]

  • 核心思想:
  • [简要说明核心思路]

  • 算法步骤:

    1、步骤1描述

    2、步骤2描述

    3、步骤3描述

    *、步骤*描述

  • 代码实现:提供有清晰注释的伪代码或程序填空
  • [请点击上面c#图标在此处插入伪代码或程序填空]

  • 优缺点分析:
    • 优点: [列出优点]
    • 缺点: [列出缺点]

解法二:[名称,如:动态规划]

  • 核心思想:
  • [简要说明核心思路]

  • 状态定义:dp[i] = [含义说明]
  • 状态转移方程:dp[i] = [方程表达式]
  • 代码实现:提供有清晰注释的伪代码或程序填空
  • [请点击上面c#图标在此处插入伪代码或程序填空]

  • 优缺点分析:
    • 优点: [列出优点]
    • 缺点: [列出缺点]

解法三:[名称,如:贪心算法]

  • 核心思想:
  • [简要说明核心思路]

  • 贪心策略:
  • [策略描述]

  • 正确性证明:
  • [简要证明或说明]

  • 代码实现:提供有清晰注释的伪代码或程序填空
  • [请点击上面c#图标在此处插入伪代码或程序填空]

  • 优缺点分析:
    • 优点: [列出优点]
    • 缺点: [列出缺点]

三、 对比总结

  • 效率对比:
  • [各解法在时间和空间上的表现对比]

  • 适用场景推荐:
    • 小数据规模: 推荐[解法名称]
    • 大数据规模: 推荐[解法名称]
    • 特殊要求: [特定场景下的推荐]

四、 推荐题目

  • 列出1-2道与本题思路相关、可供巩固练习的题目链接。



【模板二:思维演进题解模板】

一、 初始思路(第一反应)

  • 直觉解法:
  • [描述最初想到的方法]

  • 存在问题:
  • [分析该方法的缺陷]

  • 改进方向:
  • [基于缺陷提出的改进思路]

二、 优化过程

版本1.0:基础实现

  • 思路:
  • [描述基础版本的思路]

  • 复杂度: 时间O(?), 空间O(?)
  • 核心代码:提供有清晰注释的伪代码或程序填空
  • [请点击上面c#图标在此处插入伪代码或程序填空]

  • 瓶颈分析:
  • [分析性能瓶颈]

版本2.0:算法优化

  • 优化点:

    ........................................................................

    该题解等待再次审核

    ........................................................................(剩余 3018 个中英字符)

题目4320  bitset(位集)
2026-02-28 17:17:55    
Gravatar
dbk
积分:445
提交:94 / 246

一、思路

首先对于公式我们可以注意到:

$t=(s_l \space \text{and}\space s_{l+1} \space \text{and } \cdots \text{ and } s_r) \text{ xor } (\text{not }(s_l \text{ or } s_{l+1} \text{ or } \cdots \text{ or } s_r))$

$\forall k \space (1 \leq k \leq m)$ 如果要对答案有贡献就要使 $s$ 的第 $k$ 列的第 $l$ 行到第 $r$ 行都是相同的数

 为什么呢

 如果当前第 $k$ 列对答案的贡献为 $0$

那么显而易见 $xor$ 前后两个式子都必须全为 $1$ 或全是 $0$,考虑全为 $0$ 的情况,对于前一个式子可能 $l \sim r$ 行全是 $0$ 或两种数都有,思考一下就能发现只有当两种数都有的时候才会使答案的贡献为 $0$。

再考虑一下如果前后两个式子全为 $1$,那么对于前一个式子就必须使 $l \sim r$ 行都为 $1$,但显然不可以的,所以就不再考虑。

综上所述如果想让当前第 $k$ 列对答案的贡献为 $1$ 那么 $l \sim r$ 每一个数都为同一种($0$ 或 $1$)


二、实现

第一关

想必如果理解了以上思路,就很容易想到前缀和(似乎可以用树状数组(doge)),具体怎么实现也很简单根据题目数据会发现一个很奇妙的东西 $nm \leq 1e7$ 这意味着如果我们在主函数中直接定义并初始化时间复杂度是 $O(nm)$ 的!这样便可以建立数组而不超时了。

接下来定义数组 $sum_i,_j$ 表示第 $j$ 列,$1 \sim i$ 的行的前缀和,那么查询时只需要判断 $sum_{l -1},_j \space - \space sum_r,_j$ 是否全为 $0$ 或全为 $1$ 就行了

第二关

还有第二关,发现 $k$ 最大为 $2 * 10^6$ 这是很大的,意味着我们的查询 $l,r$ 完全有可能重复!所以我们可以用 hash 来优化一下(当然一些别的优化,例如:循环节优化 也可以),将每一个 $l,r$ 都变为 $1$ 个 $n$ 进制数,具体为 $l * n + r$,将转化后的数扔进 $map$(当然要用 $unordered \space map$ 优化),每次看 $l,r$ 是否重复即可

第二种实现

即二分做法,我会用另外一篇题解讲述。



题目4320  bitset(位集) AAAAAAAAAA      3      1 条 评论
2026-03-01 17:09:17