蓝桥杯 Python 组知识点容斥原理

容斥原理 

这张图初中或者高中数学课应该画过

也就是通过这个简单的例子引出容斥原理的公式

这张图的面积:s1 + s3+ s7 - 2 * s2 - 2 * s4 - 2 * s6 + 3 * s5

通过此引导出容斥原理公式

那么下面来一起看看题目

题目描述

给定 n,m 请求出所有 n 位十进制整数中有多少个数中恰好出现了 m 个 2023。

例如 00202312023是一个 11 位的出现了 2 个 2023 的十进制整数。

由于结果可能很大,请输出答案对 998,244,353 取模的结果。

输入格式

输入一行包含两个整数 n,m 用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

输入输出样例

输入 

5 1

输出

20

算法的题目可以一步步转换一步步拆解,正难则反

这道题是求“恰好”,应该不是直接能想到的吧,转换一下,先求出所有的。也就是至少有 k 个 2023 的组合总数,那么在根据容斥原理的公式算出答案即可

推导:求 >= k 也要有上限,上限很明显就是 n // 4 最多也就是这么多个 2023。定义 f(m) 为我们至少有(这里是至少哦,非常关键) m 个 2023 的组合数。首先总数变成了n - 4 * m ,然后就相当于x2023x2023x...   x 表示这里要填数字。这样有 m 个 2023 就说明有 m + 1 个位置要添数字,问题就转换成了 n - 4 * m 个小球装进 m + 1 个桶的总方案数

先看总结:

(这里就不推导了)

那这里我们的情景时第二种容器可装可不装,方案数为

基本上到这就结束了,套容斥原理的公式就行了,我直接给出了(很好推导的)

然后就是无聊的代码了,组合数的各种求法和容斥原理的代码写法我建议去 acwing 看y总的基础课,经典永流传么hh

代码

mod = 998244353def qmi(m, k, p):res, t = 1, mwhile k:if k & 1:res = res * t % pt = t * t % pk >>= 1return resdef inv(x):return qmi(x, mod - 2, mod)N = 100010
fact = [0] * N
infact = [0] * N
fact[0], infact[0] = 1, 1
for i in range(1, N):fact[i] = i * fact[i - 1] % modinfact[i] = inv(fact[i])def C(A, B):if A < B or A < 0 or B < 0:return 0return fact[A] * infact[B] % mod * infact[A - B] % moddef f(n, x):return qmi(10, n - 4 * x, mod) * C(n - 3 * x, x) % mod# print(C(5, 2))
n, m = map(int, input().split())
ist, ed = m, n // 4
ans = 0
for i in range(ist, ed + 1):if (i - m) & 1:ans = (ans - C(i, m) * f(n, i) % mod + mod) % modelse:ans = (ans + C(i, m) * f(n, i) % mod) % mod
print(ans)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitLab:添加SSH密钥之前,您不能通过SSH来拉取或推送项目代码

1、查看服务器是否配置过 [rootkingbal-ecs-7612 ~]# cd .ssh/ [rootkingbal-ecs-7612 .ssh]# ls authorized_keys id_ed25519 id_ed25519.pub id_rsa id_rsa.pub2、创建密钥 $ ssh-keygen -t rsa -C kingbalkingbal.com # -C 后写你的邮箱 一路回车 3、复制密钥 [rootk…

Rust:指针 `*T` 和引用 `T`的区别

在 Rust 编程语言中&#xff0c;*T 和 &T 是两种不同类型的指针&#xff0c;它们各自代表了不同的内存访问方式和所有权模型。 *T&#xff08;原始指针或裸指针&#xff09;&#xff1a; *T 是一个原始指针&#xff08;也称为裸指针或裸引用&#xff09;&#xff0c;它可以…

day10_Structured Steaming

文章目录 Structured Steaming一、结构化流介绍&#xff08;了解&#xff09;1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型&#xff08;掌握&#xff09;1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…

华为OD机试E卷 ---最大值

一、题目描述 给定一组整数(非负)&#xff0c;重排顺序后输出一个最大的整数。 二、示例1 用例1 输入 10 9输出 910说明:输出结果可能非常大&#xff0c;所以你需要返回一个 字符串只而不是整数。 三、输入描述 数字组合 四、输出描述 最大的整数 五、解题思路 字符…

Elasticsearch容器启动报错:AccessDeniedException[/usr/share/elasticsearch/data/nodes];

AccessDeniedException 表明 Elasticsearch 容器无法访问或写入数据目录 /usr/share/elasticsearch/data/nodes。这是一个权限问题。 问题原因&#xff1a; 1、宿主机目录权限不足&#xff1a;映射到容器的数据目录 /data/es/data 在宿主机上可能没有足够的权限供容器访问。 …

设计模式-结构型-装饰器模式

装饰器模式&#xff08;Decorator Pattern&#xff09;是结构型设计模式中的一种&#xff0c;它允许你通过将对象封装在一个新的对象中&#xff0c;来动态地添加新的功能&#xff0c;而无需改变原对象的结构。装饰器模式的核心思想是“将功能附加到对象上”&#xff0c;它是一种…

第8篇:从入门到精通:掌握Python异常处理

第8篇&#xff1a;异常处理 内容简介 本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型&#xff0c;掌握使用try-except块处理异常的方法&#xff0c;了解finally语句的作用&#xff0c;以及如何抛出和定义自定义异常。通过丰富的代码示例&#xff0…

Ubuntu20.4和docker终端指令、安装Go环境、安装搜狗输入法、安装WPS2019:保姆级图文详解

目录 前言1、docker、node、curl版本查看终端命令1.1、查看docker版本1.2、查看node.js版本1.3、查看curl版本1.4、Ubuntu安装curl1.5、Ubuntu终端保存命令 2、安装docker-compose、Go语言2.1、安装docker-compose2.2、go语言安装步骤2.3、git版本查看 3、Ubuntu20.4安装搜狗输…

【PHP】双方接口通信校验服务

请求方 使用 ApiAuthService::buildUrl($domain, [terminal > 1, ts > time()]); //http://域名/adminapi/login/platformLogin?signF7FE8A150DEC18BE8A71C5059742C81A&terminal1&ts1736904841接收方 $getParams $this->request->get();$validate ApiA…

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)

单例模式 作用&#xff1a;单例模式的核心是保证一个类只有一个实例&#xff0c;并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全&#xff0c;调用效率高 &#xff0c;但是不能延迟加载懒汉式线程安全&#xff0c;调用效率不高&#xff0c;能延迟加载双重检…

无公网IP 实现外网访问本地 Docker 部署 Navidrome

Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用&#xff0c;它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…

从零开始,掌握Django Web开发

1. Django简介 Django是一个强大的Python Web框架,它使开发人员能够快速构建安全、可扩展的Web应用程序。让我们深入了解Django的特性和优势。 1.1 什么是Django? Django是一个高级Python Web框架,于2005年首次发布。它由新闻网站的开发人员创建,旨在处理快节奏的新闻编辑室…

解决conda create速度过慢的问题

问题 构建了docker容器 想在容器中创建conda环境&#xff0c;但是conda create的时候速度一直很慢 解决办法 宿主机安装的是anaconda 能正常conda create,容器里安装的是miniforge conda create的时候速度一直很慢&#xff0c;因为容器和宿主机共享网络了&#xff0c;宿主机…

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求&#xff0c;比如&#xff1a;增加一个新字段。 如果使用如下语句新增列&#xff0c;可以成功添加列col1。但如果数据表tb已经有旧的分区&#xff08;例如&#xff1a;dt20190101&#xff09;&#xff0c;则该旧分区中的col1将为…

【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作

最近在弄selenium的爬取的过程中&#xff0c;我发现一些网站上的表格&#xff0c;是需要手动拉到底部才能加载完成的。 如果没有拉到底部&#xff0c;那么在获取网页表格的时候&#xff0c;表格就会只有显示的一部分&#xff0c;页面就不完整。 所以我就整理了一些模拟滚动鼠…

openharmony电源管理子系统

电源管理子系统 简介目录使用说明相关仓 简介 电源管理子系统提供如下功能&#xff1a; 重启服务&#xff1a;系统重启和下电。系统电源管理服务&#xff1a;系统电源状态管理和休眠运行锁管理。显示相关的能耗调节&#xff1a;包括根据环境光调节背光亮度&#xff0c;和根…

esg信息披露是什么,有什么意义

ESG信息披露是指企业将其在运营中涉及的环境&#xff08;Environment&#xff09;、社会&#xff08;Social&#xff09;及治理&#xff08;Governance&#xff09;因素&#xff0c;向投资者、消费者等利益相关者公开揭示的过程。以下是对ESG信息披露及其意义的详细解释&#x…

Power Automate 实现字符串分割、替换、换行显示

在 Power Automate 中&#xff0c;有时从 Forms 过来的数据是多选列表&#xff0c;导致选项内容是 ["AAAA","BBBB"] 这样的格式&#xff08;注意是字符串而不是列表&#xff09;&#xff0c;往往需要转换为换行显示的形式易于阅读&#xff1a; 方法 使用表…

麒麟操作系统服务架构保姆级教程(十一)https配置

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在运维工作中&#xff0c;加密和安全的作用是十分重要的&#xff0c;如果仅仅用http协议来对外展示我们的网站&#xff0c;过一段时间就会发现网站首页被人奇奇怪怪的篡改了&#xff0c;本来好好的博…

无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍

无人机&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;是无人驾驶飞行器的简称。凭借其体积小巧、操作简便、生存能力强等诸多优势&#xff0c;无人机在军事、电力巡检、航空航天与科学研究等诸多领域得到了广泛应用。在执行任务时&#xff0c;无人机可搭载多种传感器设…