news 2026/5/31 1:25:20

Python算法竞赛:容斥原理+同余性质 核心用法一站式整理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python算法竞赛:容斥原理+同余性质 核心用法一站式整理

在算法竞赛的计数+取模类题目中,经常会遇到「必须包含指定元素」「禁止某些元素」的约束——直接计算极易重复或遗漏,而容斥原理是解决这类计数问题的核心工具;面对超大数结果,同余性质配合快速幂又能高效完成取模运算。本文结合蓝桥杯2024初赛真题,一站式梳理两大知识点的原理、用法与实战代码,看完就能直接套用。

一、:容斥原理(计数去重神器)

1.1 核心思想

容斥原理的本质是先算全集、再剔除非法、补回多减部分,通过「奇加偶减」消除重复计数,完美解决多约束下的合法计数问题。

1.2 二元容斥公式

针对「必须同时包含A、B」的场景,计算公式:

合法总数 = 全集 − 不含A的数量 − 不含B的数量 + 既不含A也不含B的数量

1.3 适用场景

  • 必须包含指定数字/元素
  • 同时排除多个禁止项
  • 统计受限条件下的排列/组合数

二、:同余性质+快速幂(大数取模必备)

2.1 同余核心规则

算法竞赛中结果通常极大,必须对模数(如 10⁹+7)取余,关键规则:

  1. 加减模:(a ± b) mod m = [(a mod m) ± (b mod m) + m] mod m+m 防止出现负数
  2. 乘法模:(a × b) mod m = [(a mod m) × (b mod m)] mod m
  3. 幂模:(a^b) mod m = pow(a, b, m)(Python 内置快速幂)

2.2 快速幂优势

Python 内置三参数pow(底数, 指数, 模数)可在O(log 指数)时间内算出高次幂的模,完美处理本题 10000 次幂这类超大指数运算。

三、真题实战:蓝桥杯P2225 数字串个数

3.1 题目回顾

构造长度为10000的数字串,满足:

  1. 不出现数字0
  2. 必须包含数字3 和 7
    结果对10⁹+7取模。

3.2 容斥原理推导

  1. 全集:无0的数字串,每位可选1-9,共 9 种 → 总数为9^10000
  2. 不含3:每位去掉3,剩8种 →8^10000
  3. 不含7:每位去掉7,剩8种 →8^10000
  4. 既不含3也不含7:去掉3、7,剩7种 →7^10000

代入公式:

答案 = 9^10000 − 2×8^10000 + 7^10000(最后取模)

3.3 AC 代码

mod=10**9+7# 无0的总数字串数total=pow(9,10000,mod)# 既不含3也不含7的数字串数no_3_no_7=pow(7,10000,mod)# 容斥计算,+mod保证结果非负ans=(total-2*pow(8,10000,mod)+no_3_no_7+mod)%modprint(ans)

3.4 代码关键说明

  • mod = 10**9+7:题目指定模数
  • pow(9/8/7, 10000, mod):快速幂计算高次幂取模
  • +mod:避免减法后出现负数,确保结果合法
  • 最终% mod:统一取模,输出合规答案

四、通用模板

本题可提炼为通用计数模板,适用于:

长度为 n 的数字串,无0,必须包含指定两个数字

模板公式:

MOD=10**9+7n=长度 ans=(pow(9,n,MOD)-2*pow(8,n,MOD)+pow(7,n,MOD)+MOD)%MOD

五、总结

  1. 容斥原理:解决「必须包含」类计数,用「总-禁1-禁2+禁1∩禁2」快速去重,避免枚举
  2. 同余+快速幂:处理超大数幂运算与取模,Python 内置 pow 最优
  3. 两者结合:搞定算法竞赛90% 计数+取模高频题

掌握这套组合拳,同类题目直接套模板即可快速AC。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 1:19:20

[特殊字符] 论文党必看!免费AI查重到底

同学们好,我是你们的论文写作搭子! 最近后台私信最多的问题就是:"查重太贵了,有没有免费的?""免费查重到底准不准?" 今天咱们就用最通俗的方式,给大家扒一扒最近挺火的一…

作者头像 李华
网站建设 2026/5/31 1:13:44

AD10---常见快捷键以及说明(持续更新中..)

【PCB】测量长度 :CtrlM。【原理图、PCB】打开库:右下角System--勾选Libraries,右边即可弹出Libraries库。【原理图、PCB】将常用库导入到AD(每次打开AD都能直接用,而不是导入到一个工程中):右边…

作者头像 李华
网站建设 2026/5/31 1:11:18

三大光学仿真方法深度解析:RCWA、TMM与PWEM实战指南

三大光学仿真方法深度解析:RCWA、TMM与PWEM实战指南 【免费下载链接】Rigorous-Coupled-Wave-Analysis modules for semi-analytic fourier series solutions for Maxwells equations. Includes transfer-matrix-method, plane-wave-expansion-method, and rigorous…

作者头像 李华
网站建设 2026/5/31 1:11:17

3个技巧让Unity游戏翻译零障碍:XUnity.AutoTranslator实战指南

3个技巧让Unity游戏翻译零障碍:XUnity.AutoTranslator实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想象一下,你正在玩一款日文角色扮演游戏,剧情精彩但语言…

作者头像 李华