2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg
2022-09-29:在第 1 天,有一个人发现了一个秘密。
给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,
每天 给一个新的人 分享 秘密。
同时给你一个整数 forget ,表示每个人在发现秘密 forget 天之后会 忘记 这个秘密。
一个人 不能 在忘记秘密那一天及之后的日子里分享秘密。
给你一个整数 n ,请你返回在第 n 天结束时,知道秘密的人数。
由于答案可能会很大,请你将结果对 109 + 7 取余 后返回。
输入:n = 4, delay = 1, forget = 3。
输出:6。
答案2022-09-29:
动态规划。带死亡的繁殖问题。
代码用rust编写。代码如下:
use std::iter::repeat;
fn main() {
let ans = people_aware_of_secret(4, 1, 3);
println!("ans = {}", ans);
}
fn people_aware_of_secret(n: i32, delay: i32, forget: i32) -> i32 {
let mod0: i64 = 1000000007;
// dpKnow[i], 第i天知道秘密的人
let mut dp_know: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect();
// dpForget[i], 第i天将要忘记秘密的人
let mut dp_forget: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect();
// dpShare[i], 第i天可以分享秘密的人
let mut dp_share: Vec<i64> = repeat(0 as i64).take((n + 1) as usize).collect();
// 第1天的时候,知道秘密的人1个,A
// 第1天的时候,将要忘记秘密的人0个
// 第1天的时候,可以分享秘密的人0个
dp_know[1] = 1;
if 1 + forget <= n {
dp_forget[(1 + forget) as usize] = 1;
}
if 1 + delay <= n {
dp_share[(1 + delay) as usize] = 1;
}
// 从第2天开始!i
for i in 2..=n {
// 第i天
// dpKnow[i - 1] - dpForget[i] + dpShare[i]
dp_know[i as usize] = (mod0 + dp_know[(i - 1) as usize] - dp_forget[i as usize]
+ dp_share[i as usize])
% mod0;
if i + forget <= n {
// dpShare[i] 是第i天,刚知道秘密的人!
// 这批人,会在i + forget天,都忘了!
dp_forget[(i + forget) as usize] = dp_share[i as usize];
}
if i + delay <= n {
// dpShare[i + delay - 1] + dpShare[i] - dpForget[i + delay]
// i + delay 天 , 100天后,会分享秘密的人
// 第i天,有一些新人,i + delay天分享,一部分, dpShare[i]
// 第二部分呢?i + delay - 1天,知道秘密并且会散播的人,- dpForget[i + delay]
dp_share[(i + delay) as usize] = (mod0 + dp_share[(i + delay - 1) as usize]
- dp_forget[(i + delay) as usize]
+ dp_share[i as usize])
% mod0;
}
}
return dp_know[n as usize] as i32;
}
执行结果如下:
2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg的更多相关文章
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html
http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html http://bbs.csdn.net/topics/380187593
- 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...
- selenium获取新页面标签页(只弹出一个新页面的切换)
selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...
- 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类
一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...
- 【原创】大叔经验分享(82)logstash一个实例运行多个配置文件
logstash一个实例运行多个配置文件,将所有配置文件放到以下目录即可 /usr/share/logstash/pipeline 但是默认行为不是每个配置文件独立运行,而是作为一个整体,每个inpu ...
- Mysql下在某一列后即表的某一位置添加新列的sql语句
Mysql简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤 ...
- 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat
用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...
- 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...
- QQ 微信 新浪 无法 分享 收集
1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Secur ...
随机推荐
- Windows软件堆栈溢出(stack overflow)的一些解决方法
欢迎访问我的个人博客:xie-kang.com 原文地址 Windows平台下,有三种方法调整堆栈大小(适用于MSVC编译器): 1)添加编译参数:/F size #其中size的单位是byte可设 ...
- windows server 2008 创建计划任务不能正常执行
- Visual Studio-截断类错误
Visual Studio-截断类错误 传输数据的目标端,将提示的错误的表对应的截断字段的长度增大,重新创建表 并且,对于Visual 传输节点里面,双击红色报错的节点,然后对于数据源右键,接着选择& ...
- SHELL-反弹shell
什么是shell? 在我们深入了解发送和接收 shell 的复杂性之前,了解 shell 实际上是什么很重要.用最简单的术语来说,shell 就是我们在与命令行环境 (CLI) 交互时使用的工具.换句 ...
- Python练习--简单习题(也是一看就能够写出来的代码)
Python计算列表数字的和 数字范围内的所有偶数(append) 移除列表中的多个元素(remove) 如何实现对列表的去重 如何对简单列表进行排序 Python实现学生的排序11)
- Bootstarp5笔记
我这次来更新Bootstarp5的相关知识啦! 一.安装教程 1.在官网下载相应版本 官网地址:getbootstrap.com 我下载的是Bootstarp5版本 2.点击下载之后,会得到一个压缩文 ...
- 【读书笔记】Young Tableau_Calculus of tableaux_bumping and sliding
目录 bumping Schensted bumping algorithm 举例 sliding/digging a hole 一些定义 Schiitzenberger sliding algori ...
- protobuf 详解
protobuf protobuf概述 protobuf简介 Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式, ...
- 基于PaddleOCR的多视角集装箱箱号检测识别
基于PaddleOCR的多视角集装箱箱号检测识别 一.项目介绍 集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项.标准箱号构成基本概念:采用ISO6346(1995)标准 标准集装箱箱号由1 ...
- jwt 学习笔记
概述 JWT,Java Web Token,通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输,在数据传输过程中还可以完成数据加密.签名等相关处理 JW ...