Leetcode 2954. Count the Number of Infection Sequences

  • Leetcode 2954. Count the Number of Infection Sequences
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2954. Count the Number of Infection Sequences

1. 解题思路

这道题其实思路上还是挺简单的,就是一个数学问题,还是那种不太难的数学问题。

显然, m m m个生病的人将所有的 n n n个人分成了 n − m + 1 n-m+1 nm+1段,其中头尾两段的传播方向只能是单向的,而剩余的 m − 1 m-1 m1段则每一段都有 2 x i − 1 2^{x_i-1} 2xi1种传播序列( x i > 0 x_i>0 xi>0)。

此时,总的传播序列数目就为:

Π i = 1 m − 1 2 x i − 1 \mathop{\Pi}\limits_{i=1}^{m-1}2^{x_i-1} i=1Πm12xi1

然后,各段序列之间是可以有不同的组合方式的,而这个就是一个排列组合问题,对应的序列可能性就是:

Π i = 0 m C ∑ j ≤ i x i x i \mathop{\Pi}\limits_{i=0}^{m} \mathop{C}_{\sum\limits_{j \leq i} x_i}^{x_i} i=0ΠmCjixixi

将两式相乘即可得到我们总的可能的序列数目。

但是实际在做的时候一直遇到超时问题,因为 C n m = n ! m ! ( n − m ) ! C_n^m = \frac{n!}{m!(n-m)!} Cnm=m!(nm)!n!这个计算是很繁琐的,而且还有同余的问题,就一直处理不好。

最后是看了一下其他大佬的解答才豁然开朗,发现算法还是这么个算法,但是优化点在于说提前先算好 n ! n! n!并记录下来,然后对于 C n m C_n^m Cnm的计算就不用每次都反复求一遍了。

唉,感觉自己还是傻了……

2. 代码实现

给出python代码实现如下:

MOD = 10**9 + 7@lru_cache(None)
def get_facts():facts = [1 for _ in range(10**5+1)]for i in range(2, 10**5+1):facts[i] = i * facts[i-1] % MODreturn factsFACTS = get_facts()
def C(n, m):return FACTS[n] * pow(FACTS[m], -1, mod=MOD) * pow(FACTS[n-m], -1, mod=MOD) % MODclass Solution:def numberOfSequence(self, n: int, sick: List[int]) -> int:if len(sick) == n:return 0a, b = sick[0]-0, n-1-sick[-1]ans = 1 * C(a+b, a)s = a + bm = len(sick)for i in range(m-1):k = sick[i+1] - sick[i]-1if k > 0:s += kans = ans * pow(2, k-1, mod=MOD) * C(s, k) % MODreturn ans

提交代码评测得到:耗时404ms,占用内存20.6MB。

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

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

相关文章

免费数据采集软件,多种数据采集方式

数据无疑是企业决策的关键驱动力。要充分利用数据,就需要进行数据收集,而数据采集的方式多种多样。 数据采集方式的丰富多彩 数据采集并非一蹴而就的简单任务,而是一个多层次、多步骤的过程。在这个过程中,我们有着多种数据采集…

VS2022配置WinPcap开发

winpcap 官网:http://www.winpcap.org/ 1.首先下载安装 winpcap.exe,http://www.winpcap.org/install/default.htm 目的是安装相关驱动和 dll,安装完成之后基于 winpcap 的应用程序才能够正常运行。 2.下载 winpcap 的开发包,头文…

【Java】集合 之 使用EnumMap

使用 EnumMap 因为HashMap是一种通过对key计算hashCode(),通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。 如果作为key的对象是enum类型,那么,还可以使用Java集合库提…

FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

如何判断台灯是否伤眼?分享考研必备的护眼台灯

台灯可以说是我们日常生活中必不可少的一盏灯具,可以在夜晚的时候给我们带来充足的照明环境!而且近年来儿童青少年的近视率都非常之高,不少家长们为了保护孩子视力选择专业的台灯,因为专业的台灯对眼睛是有许多好处的,…

记录华为云服务器(Linux 可视化 宝塔面板)-- Nginx配置出现500错误记录

文章目录 1、路由配置,访问显示500如有启发,可点赞收藏哟~ 1、路由配置,访问显示500 错误如图显示500 解决思路如下 1、先查看错误日志 错误日志存放位置 提示 /login配置的文件有问题 开始配置如下图 修改前 修改后(即在/l…

世岩清上:如何做好学校课件视频

学校课件制作是教育信息化时代不可或缺的一部分。通过精心的课件制作,教师可以更好地呈现知识点,激发学生的学习兴趣,提高教学效果。 一、课件制作的重要性 随着信息技术的不断发展,教育行业逐渐引入了各种先进的技术手段&#…

echarts笔记-GeoJSON河北数据下并裁剪为冀北地图并使用echarts加载

首先找个网站把河北的GeoJSON数据下载下来,我用的是这个,理论上任意一个都可以 DataV.GeoAtlas地理小工具系列 将json数据下载后,进行裁剪,仅保留冀北数据。 如下,我裁剪的数据: {"type": &qu…

网工学习9-STP配置

如图 1 所示,当前网络中存在环路, SwitchA 、SwitchB 、SwitchC 和 SwitchD 都运行 STP,通过 彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无 环路的树形网络结构&#xff…

leetcode 201 数字范围按位与

leetcode 201 题目题解代码 题目 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left、right 端点)。 具体示例如下: 题解 本题是一个在思维上的方法,不…

怎么理解回流和重绘?

回流(reflow)和 重绘(repaint)是浏览器渲染过程中的两个关键概念。 一、概念: 回流指的是浏览器在计算文档流布局(layout)时,重新计算元素的位置和大小的过程。当页面中的元素发生尺…

Leetcode—1038.从二叉搜索树到更大和树【中等】

2023每日刷题(四十九) Leetcode—1038.从二叉搜索树到更大和树 算法思想 二叉搜索树的中序遍历(左根右)结果是一个单调递增的有序序列,我们反序进行中序遍历(右根左),即可以得到一…

【数组】-Lc136-只出现一次的数字(异或运算)

写在前面 最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给定一个非空整数数组,除了某个元素只出现一次以外&#xff0…

网络层之SDN基本概念、路由算法和路由协议

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

算法与数据结构(二十五)TopK问题:基于快排的Python模板

首先&#xff0c;先写partition模板 def partition(nums, left, right):pivot nums[left]#初始化一个待比较数据i,j left, rightwhile(i < j):while(i<j and nums[j]>pivot): #从后往前查找&#xff0c;直到找到一个比pivot更小的数j-1nums[i] nums[j] #将更小的数…

自然语言处理:电脑如何理解我们的语言?

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 ​编辑 常见方法 1.基于词典的方法 2.基于计数的方法 基于推理的方法 Bert input_ids attention_mask token_type_ids 结语 在广…

世岩清上:学校课件视频制作的要点

学校课件视频制作是一项结合教学理念、内容设计和多媒体技术的综合性工作。以下是一些要点&#xff0c;帮助你更好地进行课件视频制作。 一、明确教学目标 在制作课件视频前&#xff0c;要明确教学目标和内容&#xff0c;确保视频能够满足学生的学习需求。同时&#xff0c;要…

iosapp网站是干什么的呢?

iOSAPP网站是指针对苹果iOS系统的应用程序下载和分享网站。由于iOS系统的封闭性和严格的审核机制&#xff0c;使得iOSAPP的下载和分享相对较难。因此&#xff0c;一些专门的iOSAPP网站应运而生&#xff0c;为用户提供方便快捷的下载和分享服务。 在线生成ipa文件 一、iOSAPP网…

排序算法介绍(五)归并排序

0. 简介 归并排序&#xff08;Merge Sort&#xff09;是一种分治思想的应用&#xff0c;它将待排序的数组不断拆分成小数组&#xff0c;直到每个小数组只有一个元素&#xff0c;然后将小数组两两合并&#xff0c;直到最终得到有序的数组。 1. 归并排序的实现 归并排序的基本思…

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力&#xff0c;更有重磅电子产品免费领取! 团队价绍 参赛单位&#xff1a;上海应用技术大学 参赛队伍&#xff1a;EAIDK666 指导老师&#xff1a;蒋文萍 丁肇红 参赛队员&#xff1a;温晓静 孙亦劼 杜为栋 获奖情况&a…