P4491 [HAOI2018] 染色

传送门:洛谷

解题思路:

写本题需要知道一个前置知识:

假设恰好选 k k k个条件的方案数为 f ( k ) f(k) f(k);先钦定选 k k k个条件,其他条件无所谓的方案数为 g ( k ) g(k) g(k)
那么存在这样的一个关系: g ( k ) = ∑ i = k n C i k f ( i ) g(k)=\sum_{i=k}^nC_{i}^kf(i) g(k)=i=knCikf(i)
上述式子的含义是可以枚举实际上选了几个,然后再这 i i i个中选择 k k k个作为钦定的计算方案数.因为钦定这种方式是存在重复方案的
然后使用二项式反演可以实现钦定和恰好之间的转化.
经过二项式反演可以得到: f ( k ) = ∑ i = k n C i k ∗ ( − 1 ) i − k ∗ g ( i ) f(k)=\sum_{i=k}^nC_{i}^{k}*(-1)^{i-k}*g(i) f(k)=i=knCik(1)ikg(i).

对于本题来说,我们的 g ( i ) g(i) g(i)其实很容易写出.设 g ( i ) g(i) g(i)为恰好出现 i i i个的出现次数为 s s s的颜色的方案数.不难写出 g ( i ) = C m i A n s ∗ i ( s ∗ i ) ! ∗ ( m − i ) n − s ∗ i g(i)=C_m^i\frac{A_n^{s*i}}{(s*i)!}*(m-i)^{n-s*i} g(i)=Cmi(si)!Ansi(mi)nsi
然后我们反演一下就得到了: f ( k ) = ∑ i = k n C i k ( − 1 ) i − k g ( i ) f(k)=\sum_{i=k}^{n}C_{i}^{k}(-1)^{i-k}g(i) f(k)=i=knCik(1)ikg(i)
稍微化解一下就能得到:
f ( k ) ∗ k ! = ∑ i = k n g ( i ) ∗ i ! ∗ ( − 1 ) i − k ( i − k ) ! f(k)*k!=\sum_{i=k}^ng(i)*i!*\frac{(-1)^{i-k}}{(i-k)!} f(k)k!=i=kng(i)i!(ik)!(1)ik
然后我们设 G ( i ) = g ( i ) ∗ i ! , H ( i ) = ( − 1 ) i − k ( i − k ) ! G(i)=g(i)*i!,H(i)=\frac{(-1)^{i-k}}{(i-k)!} G(i)=g(i)i!,H(i)=(ik)!(1)ik就能得到 F ( k ) = ∑ i = k n G ( i ) ∗ H ( i − k ) F(k)=\sum_{i=k}^nG(i)*H(i-k) F(k)=i=knG(i)H(ik)
我们使用经典套路将 G G G数组 r e v e r s e reverse reverse一下,就得到了 F ( K ) = ∑ i = k n G ( n − i ) ∗ H ( i − k ) F(K)=\sum_{i=k}^nG(n-i)*H(i-k) F(K)=i=knG(ni)H(ik)
PS:需要注意的是此时翻转的n可以不为n,不熟悉的人可能会搞不清楚
然后这是一道很显然的卷积式子.此时我们使用 N T T NTT NTT卷一下即可.此时我们的的 f ( k ) f(k) f(k)就是卷积完之后第 n − k n-k nk项的系数.


下面是具体的代码部分:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls rt<<1
#define rs rt<<1|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
inline void print(__int128 x){if(x<0) {putchar('-');x=-x;}if(x>9) print(x/10);putchar(x%10+'0');
}
#define maxn 10001000
#define int long long
const int mod=1004535809;
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
int qpow(int a,int b) {int ans=1;while(b) {if(b&1) ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}
int rev[maxn];
void NTT(int *a,int n,int inv) {for(int i=0;i<=n;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);for(int len=1;len<=(n>>1);len<<=1) {int gn=qpow(inv==1?3:qpow(3,mod-2),(mod-1)/(len<<1));for(int i=0;i<=n;i+=(len<<1)) {int g0=1;for(int j=0;j<=len-1;j++) {int x=a[i+j],y=a[i+j+len]*g0%mod;a[i+j]=(x+y)%mod;a[i+j+len]=((x-y)%mod+mod)%mod;g0=g0*gn%mod;}}}
}
int fac[maxn],in_fac[maxn];
void init(int limit) {fac[0]=1;for(int i=1;i<=limit;i++) {fac[i]=fac[i-1]*i%mod;}in_fac[limit]=qpow(fac[limit],mod-2);for(int i=limit-1;i>=0;i--) {in_fac[i]=in_fac[i+1]*(i+1)%mod;}
}
int C(int a,int b) {return fac[a]*in_fac[b]%mod*in_fac[a-b]%mod;
}
int A(int a,int b) {return fac[a]*in_fac[a-b]%mod;
}
int w[maxn];int g[maxn];int G[maxn],H[maxn];int F[maxn];
signed main() {int n=read();int m=read();int s=read();init(max(n,m));for(int i=0;i<=m;i++) {w[i]=read();}int k=min(m,n/s);for(int i=0;i<=k;i++) {g[i]=C(m,i)*A(n,s*i)%mod*qpow(in_fac[s],i)%mod*qpow(m-i,n-s*i)%mod;}for(int i=0;i<=k;i++) {G[i]=g[i]*fac[i]%mod;H[i]=((i&1?-1:1)*in_fac[i]%mod+mod)%mod;}reverse(G,G+k+1);int limit=1,len=0;while(limit<=k+k) limit<<=1,len++;for(int i=0;i<=limit;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(len-1));NTT(G,limit,1);NTT(H,limit,1);for(int i=0;i<=limit;i++) F[i]=G[i]*H[i]%mod;NTT(F,limit,-1);int inv=qpow(limit,mod-2);for(int i=0;i<=limit;i++) {F[i]=F[i]*inv%mod;}int ans=0;for(int i=0;i<=k;i++) {ans=(ans+F[k-i]*in_fac[i]%mod*w[i]%mod)%mod;}cout<<ans<<endl;return 0;
}

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

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

相关文章

【windows下docker安装rocketMQ】

namesrv和broker安装就不说了&#xff0c;见如下博客 https://blog.csdn.net/Wonderful1025/article/details/107244434/ 安装rocketMQ-console docker run -d -e "JAVA_OPTS-Drocketmq.config.namesrvAddr192.168.65.2:9876 -Drocketmq.config.isVIPChannelfalse"…

12.SpringBoot之RestTemplate的使用

SpringBoot之RestTemplate的使用 初识RestTemplate RestTemplate是Spring框架提供用于调用Rest接口的一个应用&#xff0c;它简化了与http服务通信方式。RestTemplate统一Restfull调用的标准&#xff0c;封装HTTP链接&#xff0c;只要需提供URL及返回值类型即可完成调用。相比…

Spark中的Driver、Executor、Stage、TaskSet、DAGScheduler等介绍

工作流程&#xff1a; Driver 创建 SparkSession 并将应用程序转化为执行计划&#xff0c;将作业划分为多个 Stage&#xff0c;并创建相应的 TaskSet。Driver 将 TaskSet 发送给 TaskScheduler 进行调度和执行。TaskScheduler 根据资源情况将任务分发给可用的 Executor 进程执…

DAE转换GLB格式

1、DAE模型介绍 DAEA&#xff08;Deep Attentive and Ensemble Autoencoder&#xff09;模型是一种用于无监督学习的深度学习模型&#xff0c;由华为公司提出。DAEA模型结合了自编码器和深度注意力机制&#xff0c;能够对高维数据进行降维和特征提取&#xff0c;并且在处理大规…

博图数值按照特定格式(“T000000”)转换成字符串

一、前言 1.string to dint物流输送线往往需要通过扫码器读取托盘条码&#xff0c;一维码或者二维码​。 读取的数据需要解析才能正常使用。两种方式读取的数据直接是字符串&#xff0c;但当设备与上位机通信时&#xff0c; 字符串数据量太大&#xff0c;故可以通过算法转换成…

Ceph分布式存储的简单介绍与Ceph集群的部署搭建

文章目录 1. 存储的概述1.1 单机存储设备1.1.1 DAS&#xff08;直接附加存储&#xff09;1.1.2 NAS&#xff08;网络附加存储&#xff09;1.1.3 SAN&#xff08;存储区域网络&#xff09; 1.2 单机存储的缺陷1.3 分布式存储&#xff08;软件定义的存储 SDS&#xff09;1.4 分布…

unity ugui text 超链接和下划线,支持部分富文本格式

unity版本&#xff1a;2021.3.6f1 局限性&#xff1a; 1.测试发现不能使用 size 富文本标签, 2.同一文本不能设置不同颜色的超链接文本 其它&#xff1a;代码中注释掉使用innerTextColor的地方&#xff0c;可以使用富文本设置超链接颜色&#xff0c; 但是下划线是文本本身颜色 …

springboot中如何进行业务层测试事务回滚

业务层测试事务回滚 为测试用例添加事务&#xff0c;SpringBoot会对测试用例对应的事务提交操作进行回滚 SpringBootTest Transactional public class DaoTest { Autowired private BookService bookService;} 如果想在测试用例中提交事务&#xff0c;可以通过Rollback注…

windows部署django服务器

windows部署django服务器 1、安装IIS1.1 控制面板-----程序----程序和功能----启用或关闭windows功能1.2安装IIS服务器&#xff0c;完成后&#xff0c;重新进入&#xff0c;把CGI安装进系统 2、安装python与虚拟环境2.1 安装python2.2 安装virtualenv虚拟环境2.3 创建一个虚拟环…

求二叉树的高度——函数递归的思想

二叉树的高度&#xff1a;左右两个数最高的那个的1 int TreeHight(BTNode* root) {if (root NULL){return 0;}int lefhightTreeHight(root->left);int righthight TreeHight(root->right);return lefhight > righthight ? TreeHight(root->left) 1 : TreeHight…

mysql中遇到查询字段的别名与函数冲突问题

比如以下哎&#xff0c;我查询城市行业数量排名 select City, DENSE_RANK() over(ORDER BY COUNT(Id) DESC) rank, COUNT(Id) num,IndustrySubGroupName from base_companyinfo WHERE IndustrySubGroupName工业机器人 GROUP BY City 上面使用 DENSE_RANK() 函数来计算排名&am…

深入推荐引擎2:YouTube 视频推荐系统

深入推荐引擎2:YouTube 视频推荐系统 概述候选生成网络体系结构和功能表示训练排名网络特征选择架构迈向多任务排名系统多任务学习专家的多门混合学习选择偏差总结参考这篇博客将介绍 YouTube 视频推荐系统,YouTube 是世界上最大的创建、消费和分享视频内容的平台。他们的推荐…

想要精通算法和SQL的成长之路 - 连续的子数组和

想要精通算法和SQL的成长之路 - 连续的子数组和 前言一. 连续的子数组和1.1 最原始的前缀和1.2 前缀和 哈希表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 连续的子数组和 原题链接 1.1 最原始的前缀和 如果这道题目&#xff0c;用前缀和来算&#xff0c;我们的思路…

雷电模拟器上使用第一个frida(三)简单的使用实例

经过前两篇 雷电模拟器上使用第一个frida&#xff08;一&#xff09;之安装-CSDN博客雷电模拟器上使用第一个frida&#xff08;二&#xff09;之su超级权限-CSDN博客 本篇开始记录如何使用frida进行hook。 一、先让手机模拟器端的frida server运行起来 虽然是让手机模拟器端…

Rust 流程控制

开发中最常见的用来控制执行流的结构是判断和循环。 判断 Rust 中的 if 表达式允许根据条件执行不同的代码分支&#xff0c;提供一个条件并表示 “如果条件满足&#xff0c;运行这段代码&#xff1b;如果条件不满足&#xff0c;不运行这段代码。” 需要注意的是&#xff0c;…

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)

十一、计划任务与Queue队列实践&#xff1a; 1. 计划任务&#xff1a; Linux环境下定时或者周期性的执行一些任务通常由cron这个守护进程来完成&#xff0c;这是一个系统自带的相对也比较方便的系统工具。 sudo apt-get install cron // 默认自带目录结构&#xff1a; 目录说…

驾驶数字未来:汽车业界数字孪生技术的崭新前景

随着数字化时代的到来&#xff0c;汽车行业正经历着前所未有的变革。数字孪生技术&#xff0c;作为一种前沿的数字化工具&#xff0c;正在为汽车行业带来革命性的影响&#xff0c;不仅改变着汽车制造和维护的方式&#xff0c;也为消费者带来了前所未有的体验。让我们一起探讨&a…

算法通过村第十四关-堆|白银笔记|经典问题

文章目录 前言在数组中寻找第K大的元素堆排序原理合并K个排序链表总结 前言 提示&#xff1a;想要从讨厌的地方飞出来&#xff0c;就得有藏起来的翅膀。 --三岛由纪夫《萨德侯爵夫人》 这里我们主要看一下经典的题目&#xff0c;这三个题目来说都是堆的热点问题。重点再理解处理…

SpringMVC之WEB-INF下页面跳转@ModelAttributeIDEA tomcat控制台中文乱码问题处理

WEB-INF下页面跳转 ModelAttribute来注解非请求处理方法 用途&#xff1a;预加载数据&#xff0c;会在每个RequestMapping方法执行之前调用。 特点&#xff1a;无需返回视图&#xff0c;返回类型void IDEA tomcat控制台中文乱码问题处理 复制此段代码&#xff1a;-Dfile.e…

有 AI,无障碍,AIoT 设备为视障人群提供便利

据世界卫生组织统计&#xff0c;全球共 22 亿人视力受损&#xff0c;包含 2.85 亿视障人群和 3,900 万全盲人群。而且&#xff0c;这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便&#xff0c;但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题…