AtCoder Beginner Contest 279 G. At Most 2 Colors(计数/组合数学/dp递推)

news2025/1/20 3:00:37

题目

n(2<=n<=1e6)个格子,从左到右一字排开,

现在需要给格子涂色,有c(1<=c<=1e9)种颜色,

要求连续的k(2<=k<=n)个格子的颜色数最多只有2种,

求方案数,答案对998244353取模

思路来源

TOYOTA SYSTEMS Programming Contest 2022(AtCoder Beginner Contest 279)(G.At Most 2 Colors容斥,DP,组合数学) - 知乎

题解

dp[i]表示长度为i的格子的合法涂色数,考虑第i个怎么放

①第i个前面k-1个位置有2种颜色,则第i个位置只能放这两种颜色中的一种

用合法方案减只有一种的方法,即得两种颜色的方案数

而只有一种颜色的方案数,等于f[i-k+1],

此时,让中间的k-2个格子都和i-k+1涂一样的即可

②第i个前面k-1个位置仅有一种颜色,刚求过,f[i-k+1],

此时,第i个位置有c种选择可以涂,

dp[i]=(dp[i]-dp[i-k+1])*2+c*dp[i-k+1]

当i-k+1<1时,相当于前缀没有限制,

而目的是为了让这中间夹着的<=k-2个格子同色,

此时方案数有c种,与dp[1]统一

注意到c=1或2时,c-2<=0,可以特判,

但代入式子后发现,可以和式子统一

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,mod=998244353;
int n,k,c,dp[N];
int main(){
    cin>>n>>k>>c;
    dp[1]=c;
    for(int i=2;i<=n;++i){
        dp[i]=(2ll*dp[i-1]%mod+1ll*(c-2)*dp[max(1,i-k+1)]%mod)%mod;
    }
    cout<<dp[n]<<endl;
	return 0;
}

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

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

相关文章

3. HTML的语法规范

3. HTML的语法规范 3.1.2 注释的作用和写法 ➢ 注释的作用&#xff1a; ​ •为代码添加的具有解释性、描述性的信息&#xff0c;主要用来帮助开发人员理解代码 ​ •浏览器执行代码时会忽略所有的注释 ➢ 注释的快捷键&#xff1a; ​ • 在VS Code中&#xff1a;ctrl / 3.1.…

中国的LPR改革及其意义

中国的LPR改革及其意义 – 潘登同学的宏观经济学笔记 文章目录中国的LPR改革及其意义 -- 潘登同学的宏观经济学笔记LPR的两次改革为什么需要LPR改革LPR改革的意义LPR的两次改革 LPR&#xff1a;商业银行对其最优质的客户执行的贷款利率 LPR在我国经历了两次改革&#xff0c;一…

PyTorch中torch.gather()函数

一. torch.gather()函数 官方文档&#xff1a;torch.gather函数&#xff0c;定义&#xff1a;从原tensor中获取指定dim和指定index的数据。 看到这个核心定义&#xff0c;我们很容易想到gather()的基本想法其实就类似从完整数据中按索引取值般简单&#xff0c;比如下面从列表中…

Kafka - 07 Zookeeper中存储的 Kafka 信息

我们在前面的文章中搭建了 Kafka 集群&#xff0c;分别是伪集群和真实的集群&#xff1a; Kafka - 03 Kafka安装 | 单机环境搭建 | 伪集群环境搭建 (一台虚拟机) Kafka - 06 Kafka 集群环境搭建&#xff08;三台虚拟机&#xff09; 两种方式中&#xff0c;Zookeeper 存储的 …

微机-------8086/8088寻址方式

目录 8086/8088寻址方式8086/8088寻址方式 1、立即寻址 立即数只能作为源操作数 MOV AL,80H MOV AX,306AH2、寄存器寻址 8位操作数的寄存器可以是:AH、AL、BH、BL、CH、CL、DH、DL 16位操作数的寄存器可以是:

如何录制视频?有了这款视频录制软件,粉丝多了,转发量也起来了

一款好用的视频录制软件&#xff0c;可以为视频录制工作带来便捷&#xff0c;高效的解决如何录制视频的难题。视频经济时代&#xff0c;很多人都用视频录制软件来进行视频录制&#xff0c;并分享到社交平台。但是很多时候&#xff0c;往往是两极分化&#xff0c;有的人粉丝几百…

[操作系统笔记]内存管理1

内容系听课复习所做笔记&#xff0c;图例多来自课程截图 覆盖与交换 下图为覆盖技术图示&#xff1a; 交换技术和中级调度密切相关&#xff1a; 中级调度&#xff08;内存调度&#xff09;&#xff1a;就是要决定将哪个处于挂起状态的进程重新调入内存 在哪保存被换出的进程 具…

m基于遗传优化算法的公式参数拟合matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”&#xff0c;在算法中也即是以二进制编码的串。并且&#xff0c;在执行遗传算法之前&#xff0c;给出一群“染色体”&#xff0c;也即是假…

MySQL窗口函数

窗口函数在统计类的需求中很常见&#xff0c;稍微复杂一点的查询需求就有可能用到它&#xff0c;使用窗口函数可以极大的简化我们的 SQL 语句。像 Oracle、SQL Server 这些数据库在较早的版本就支持窗口函数了&#xff0c;MySQL 直到 8.0 版本后才支持它。 一般来说涉及复杂的分…

pytorch深度学习实战lesson29

第二十九课 深度学习硬件 这节课讲一下深度学习的硬件。具体来讲一下所谓的 CPU 和 GPU有什么区别&#xff0c;为什么 GPU 会快&#xff1f; 目录 CPU GPU 首先大家如果学习深度学习的话基本上都有一个GPU的电脑&#xff0c;如果你自己装一台机器的话&#xff0c;很有可能是…

【JavaScript高级】04-JavaScript函数增强

JavaScript函数增强函数属性和arguments函数对象的属性函数中的argumentsarguments转Array函数的剩余参数纯函数的理解和应用JavaScript纯函数定义纯函数案例柯里化的理解和应用柯里化定义组合函数理解和应用函数属性和arguments 函数对象的属性 在JavaScript中函数也是一个对…

维格云自定义按钮入门教程

目录 维格云自定义按钮功能简介 维格云自定义按钮适用场景 维格云自定义按钮设置步骤 开启插件 在拓展设置中创建按钮 在数据表中添加自定义按钮 效果展示 维格云自定义按钮注意事项 维格云自定义按钮功能简介 给不同情境下的数据详情页面,添加按钮,点击后可往另一个…

【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)

文章目录一、极大极小搜索&#xff08;Minimax Algorithm&#xff09;二、α-β剪枝&#xff08;Alpha-Beta Pruning&#xff09;三、解题技巧一、极大极小搜索&#xff08;Minimax Algorithm&#xff09; 在零和博弈&#xff08;有完整信息的&#xff0c;确定的、轮流行动的&…

steam搬砖项目月入过万靠谱吗

大家好&#xff0c;我是阿阳 什么是国外steam游戏装备汇率差项目 一、项目介绍 其实&#xff0c;Steam就是一个美国的游戏平台&#xff0c;搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧&#xff0c;这款游戏就是CS的一个系列。&#xff08;通俗易懂的理解就…

【C++数据结构】性能测量

性能测量 4.1 引言 容易计算内存的需求大小&#xff0c;只要知道编译后的代码和数据空间的大小就可以了&#xff1b; 数据空间的大小取决于用户所要解决的问题实例的大小。 要确定程序运行时间&#xff0c;需要通过实验来测量。 程序性能不仅依赖操作类型和数量&#xff0c…

Excel逆向查询的多种方法,赶快学起来

关于匹配查询&#xff0c;我们平时用的做多的就是VLOOKUP函数了&#xff0c;但VLOOKUP函数只能正向查找&#xff0c;不能逆向查询。 像是下面这种情况就不可以&#xff1a; &#xff08;现在我们想用编码去匹配书名&#xff09; 如果在不改变原表格结构的基础上查找出书目编码…

当MySQL和java通过媒婆navicate谈上了恋爱 ------ MySQL的安装和Java的连接

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐当MySQL和java通过媒婆navicate谈上了恋爱⭐ 文章目录⭐当MySQL和java通过媒婆navicate谈上了恋爱…

vue组件库发布到npm

修改项目的信息 在package.json文件中&#xff1a; 修改Readme文件的信息 注册npm 账号 指路官网 vscode终端登录npm 执行 npm login 输入用户名&#xff0c;密码&#xff0c;邮箱&#xff0c;邮箱验证码 如下图 执行 npm publish 如下图 出现的问题 npm ERR! code E403 …

CSAPP Lab6:Malloc

文章目录一、实验简介二、隐式链表实现基本宏块的相关函数mm_initmm_mallocmm_freemm_reallocextend_heapblk_mergeblk_findblk_split使用下次匹配三、显式链表实现四、分离适配五、完整代码隐式链表显式链表课本实现一、实验简介 实现一个动态内存分配器。 tar xvf mallocla…

Linux 应急响应命令总结,收藏版

系统排查 系统基本信息 CPU 信息 CPU 信息&#xff1a;lscpu 操作系统信息 操作系统信息&#xff1a;uname -a 操作系统信息&#xff1a;cat /proc/version 模块信息 模块信息&#xff1a;lsmod 账户信息 系统所有账户 系统所有账户&#xff1a;cat /etc/passwd 超级权限账户 超…