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)i−k∗g(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(s∗i)!Ans∗i∗(m−i)n−s∗i
然后我们反演一下就得到了: 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=k∑nCik(−1)i−kg(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=k∑ng(i)∗i!∗(i−k)!(−1)i−k
然后我们设 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)=(i−k)!(−1)i−k就能得到 F ( k ) = ∑ i = k n G ( i ) ∗ H ( i − k ) F(k)=\sum_{i=k}^nG(i)*H(i-k) F(k)=i=k∑nG(i)∗H(i−k)
我们使用经典套路将 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=k∑nG(n−i)∗H(i−k)
PS:需要注意的是此时翻转的n可以不为n,不熟悉的人可能会搞不清楚
然后这是一道很显然的卷积式子.此时我们使用 N T T NTT NTT卷一下即可.此时我们的的 f ( k ) f(k) f(k)就是卷积完之后第 n − k n-k n−k项的系数.
下面是具体的代码部分:
#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;
}
相关文章:
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_{ik}^nC_{i}^kf(i) g(k)…...
12096 - The SetStack Computer (UVA)
题目链接如下: Online Judge 这道题我一开始的思路大方向其实是对的,但细节怎么实现set到int的哈希没能想清楚(没想到这都能用map)。用set<string>的做法来做,测试数据小的话答案是对的,但大数据时…...
Pygame中将鼠标形状设置为图片2-1
在Pygame中利用Sprite类的派生类将鼠标形状设置为图片,其原理就是将Sprite类的派生类对应图片的位置设置为鼠标的当前位置即可。其效果如图1所示。 图1 将鼠标设置为图片 从图1可以看出,鼠标的形状变为红色的,该红色的随着鼠标的移动而移动&…...
Vue3 + Nodejs 实战 ,文件上传项目--实现图片上传
目录 技术栈 1. 项目搭建前期工作(不算太详细) 前端 后端 2.配置基本的路由和静态页面 3.完成图片上传的页面(imageUp) 静态页面搭建 上传图片的接口 js逻辑 4.编写上传图片的接口 5.测试效果 结语 博客主页:専心_前端,javascript,mys…...
linux C++ vscode连接mysql
1.linux使用Ubuntu 2.Ubuntu安装vscode 2.1 安装的是snap版本,直接打开命令行执行 sudo snap install --classic code 3.vscode配置C 3.1 直接在扩展中搜索C安装即可 我安装了C, Chinese, code runner, 安装都是同理 4.安装mysql sudo apt update sudo apt install mysql-…...
[资源推荐]langchain、LLM相关
之前很多次逛github或者去B站看东西或者说各种浏览资讯的情况,都会先看两眼然后收藏然后就吃灰的情况,那既然这样,不如多看几眼,看看是否真的能用得上,能用在哪,然后用几句话总结出来,分享出来&…...
hdfs笔记
1.HDFS shell 1.0查看帮助 hadoop fs -help <cmd> 1.1上传 hadoop fs -put <linux上文件> <hdfs上的路径> 1.2查看文件内容 hadoop fs -cat <hdfs上的路径> 1.3查看文件列表 hadoop fs -ls / 1.4…...
java_方法引用和构造器引用
文章目录 一、方法引用1.1、方法引用的理解1.2、格式1.3、举例 二、构造器引用2.1、格式2.2、例子2.3、数组引用 一、方法引用 1.1、方法引用的理解 方法引用,可以看做是基于lambda表达式的进一步刻画当需要提供一个函数式接口的实例时,可以使用lambda…...
Flink Log4j 2.x使用Filter过滤日志类型
Flink Log4j 2.x使用Filter过滤日志类型(区别INFO、ERROR) 文章目录 Flink Log4j 2.x使用Filter过滤日志类型(区别INFO、ERROR)ThresholdFilterLevelMatchFilter 日志级别: ALL < TRACE < DEBUG < INFO < …...
Ubuntu下怎么配置vsftpd
2023年10月12日,周四中午 目录 首先要添加一个系统用户然后设置这个系统用户的密码给新创建的系统用户创建主目录启动vsftpd服务查看vsftpd服务的状态打开外界访问vsftpd服务所需的端口获取服务器的IP地址大功告成 首先要添加一个系统用户 useradd 用户名然后设置…...
链表(7.27)
3.3 链表的实现 3.3.1头插 原理图: newnode为新创建的节点 实现: //头插 //让新节点指向原来的头指针(节点),即新节点位于开头 newnode->next plist; //再让头指针(节点)指向新节点&#…...
在 Elasticsearch 中实现自动完成功能 1:Prefix queries
自动完成与搜索功能不同 - 我们应该在用户键入下一个字符后立即更新自动完成选项,每秒都会访问数据库,过滤数百万条记录,而不会导致任何性能下降! Elasticsearch 是一种可以轻松实现此类功能的技术,它是一种基于 Apac…...
『PyQt5-Qt Designer篇』| 13 Qt Designer中如何给工具添加菜单和工具栏?
13 Qt Designer中如何给工具添加菜单和工具栏? 1 创建默认窗口2 添加菜单栏3 查看和调用1 创建默认窗口 当新创建一个窗口的时候,默认会显示有:菜单栏和状态栏,如下: 可以在菜单栏上右键-移除菜单栏: 可以在菜单栏上右键-移除状态栏: 2 添加菜单栏 在窗口上,右键-创建…...
Android Studio新建项目教程
Android Studio新建项目教程 一、创建新项目 二、选择空白页项目类型 配置然后finish 等待项目完成初试化 等待初始化结束,创建完成...
前端页面布局之【响应式布局】
目录 🌟前言🌟优点🌟缺点🌟media兼容性🌟利用CSS3-Media Query实现响应式布局🌟常见的媒体类型🌟常见的操作符🌟属性值🌟设备检测🌟响应式阈值选取dz…...
定制排序小案例
案例:自定义 Book 类,里面包含 name 和 price,按 price 排序(从大到小)。 要求使用两种方式排序 , 有一个 Book[] books 4 本书对象. 使用前面学习过的传递 实现 Comparator 接口匿名内部类,也称为定制排序。 可以按照 price …...
如何设计一个ToC的弹窗
本文主要分享了如何设计一个具有高可扩展性的弹窗功能。 本设计参考了优惠券功能的设计思路,有兴趣的朋友可以看看优惠券的分享:如何设计一个可扩展的优惠券功能_java优惠券系统设计-CSDN博客 一、需求介绍 假如你的项目需要实现以下弹窗,…...
Idea执行Pom.xml导入jar包提示sun.misc.BASE64Encoder jar找不到---SpringCloud工作笔记197
奇怪之前都是好好的,这个是因为,jdk的版本不对,重新打开以后自动被选择成jdk11了...记录一下 原因是从jdk9的时候,这个jar包已经被删除了,所以会报错,如果你用的是jdk自带的这个jar包就会报错,那么还可以,修改,不让他用jdk的,让他用 用org.apache.commons.codec.binary.Base64…...
大数据面试题:Spark和Flink的区别
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:1)Spark Streaming和Flink的区别 问过的一些公司:杰创智能科技(2022.11),阿里蚂蚁(2022.11)&…...
2023年9月青少年软件编程(C 语言) 等级考试试卷(二级)
2023年9月青少年软件编程(C 语言) 等级考试试卷(二级) 编程题 1.数组指定部分逆序重放 题目描述 将一个数组中的前k项按逆序重新存放。 例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。 输入 输入为两行ÿ…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...
