【CF961G】Partitions(第二类斯特林数)

【CF961G】Partitions(第二类斯特林数)

题面

CodeForces
洛谷

题解

考虑每个数的贡献,显然每个数前面贡献的系数都是一样的。
枚举当前数所在的集合大小,所以前面的系数\(p\)就是:
\[\begin{aligned} p&=\sum_{i=1}^n{n-1\choose i-1}i\begin{Bmatrix}n-i\\k-1\end{Bmatrix}\\ &=\sum_{i=1}^n{n-1\choose i-1}i\frac{1}{(k-1)!}\sum_{j=0}^{k-1}(-1)^j{k-1\choose j} (k-1-j)^{n-i}\\ &=\sum_{i=1}^n{n-1\choose i-1}i\sum_{j=0}^{k-1}\frac{(-1)^j (k-1-j)^{n-i}}{j!(k-1-j)!}\\ &=\sum_{j=0}^{k-1}\frac{(-1)^j }{j!(k-1-j)!}\sum_{i=1}^n{n-1\choose i-1}i(k-1-j)^{n-i}\\ \end{aligned}\]
把后面一半拿出来单独算,令\(t=k-1-j\)
\[\begin{aligned} &\ \ \ \sum_{i=1}^n{n-1\choose i-1}it^{n-i}\\ &=\sum_{i=1}^n \frac{(n-1)!}{(i-1)!(n-i)!}it^{n-i}\\ &=\sum_{i=1}^n \frac{(n-1)!}{(i-1)!(n-i)!}(i-1+1)t^{n-i}\\ &=\sum_{i=1}^n \frac{(n-2)!}{(i-2)!(n-i)!}(n-1)t^{n-i}+\sum_{i=1}^n \frac{(n-1)!}{(i-1)!(n-i)!}t^{n-i}\\ &=(n-1)\sum_{i=1}^n {n-2\choose i-2}t^{n-i}+\sum_{i=1}^n{n-1\choose i-1}t^{n-i}\\ &=(n-1)\sum_{i=1}^n {n-2\choose n-i}t^{n-i}+\sum_{i=1}^n{n-1\choose n-i}t^{n-i}\\ &=(n-1)(t+1)^{n-2}+(t+1)^{n-1} \end{aligned}\]
所以再带回到原式中:
\[ \begin{aligned} p&=\sum_{j=0}^{k-1}\frac{(-1)^j }{j!(k-1-j)!}\sum_{i=1}^n{n-1\choose i-1}i(k-1-j)^{n-i}\\ &=\sum_{j=0}^{k-1}\frac{(-1)^j }{j!(k-1-j)!}((n-1)(k-j)^{n-2}+(k-j)^{n-1})\\ &=\sum_{j=0}^{k-1}\frac{(-1)^j }{j!(k-1-j)!}(n+k-j-1)(k-j)^{n-2} \end{aligned} \]
快速幂就完事了。


然而我在洛谷的题解里面还看到了另外一种考虑的方法:
考虑贡献中的\(|S|\sum w_i\),可以认为是划分出来的集合中,每一个点都对于当前这个点贡献一次\(w_i\)。那么考虑当前点被其它点做的贡献次数。
考虑一个点对\((i,j)\),如果\(i\neq j\),那么方案数就是两者在同一个集合中的方案数,考虑将两个点合并在一起,那么就是\(\begin{Bmatrix}n-1\\k\end{Bmatrix}\),如果\(i=j\),那么无论如何都有贡献,也就是\(\begin{Bmatrix}n\\k\end{Bmatrix}\)。所以,可以得到:
\[p=\begin{Bmatrix}n\\k\end{Bmatrix}+(n-1)\begin{Bmatrix}n\\k\end{Bmatrix}\]
第二类斯特林数直接用容斥展开式计算即可,复杂度不变。

代码是第一种方法的。

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 200200
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
int fpow(int a,int b)
{int s=1;if(b<0)return 1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;
}
int n,K,ans,p;
int jc[MAX],jv[MAX],inv[MAX];
int main()
{scanf("%d%d",&n,&K);for(int i=1,x;i<=n;++i)scanf("%d",&x),add(ans,x);inv[0]=inv[1]=jc[0]=jv[0]=1;for(int i=1;i<=K;++i)jc[i]=1ll*jc[i-1]*i%MOD;for(int i=2;i<=K;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;for(int i=1;i<=K;++i)jv[i]=1ll*jv[i-1]*inv[i]%MOD;for(int i=0,d=1;i<K;++i,d=MOD-d)add(p,1ll*d*jv[i]%MOD*jv[K-1-i]%MOD*(n+K-i-1)%MOD*fpow(K-i,n-2)%MOD);ans=1ll*ans*p%MOD;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/10150486.html

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

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

相关文章

js绑定事件和阻止事件

js事件一、绑定事件1、html绑定2、el属性绑定3、el函数绑定4、事件捕获与冒泡5、js常见事件称名二、阻止事件1、event.stopPropagation()2、return false3、event.preventDefault();4、兼容写法一、绑定事件 1、html绑定 <div onclick"alert(click!)">click&…

linux中service的问题

1.描述问题 2.解决方案 systemctl stop firewalld systemctl mask firewalldThen, install the iptables-services package: yum install iptables-servicesEnable the service at boot-time: systemctl enable iptablesManaging the service systemctl [stop|start|restart] i…

火狐可以打开谷歌打不开_如何设置Firefox以使用Google Apps打开所有内容

火狐可以打开谷歌打不开Google offers a pretty comprehensive set of online applications which many of you probably take advantage of. Here is how to easily configure Firefox to use Google’s online offerings for email, RSS, PDF and office documents as your d…

设置第三方的SMTP服务

取得授权码: 转载于:https://www.cnblogs.com/0909/p/10153499.html

表单重复提交问题

2019独角兽企业重金招聘Python工程师标准>>> 为什么会发生表单重复提交呢&#xff1f; 网络延时 在平时开发中&#xff0c;如果网速比较慢的情况下&#xff0c;用户提交表单后&#xff0c;发现服务器半天都没有响应&#xff0c;那么用户可能会以为是自己没有提交表单…

js事件名称集

一般事件 名称描述onClick鼠标点击事件&#xff0c;多用在某个对象控制的范围内的鼠标点击onDblClick鼠标双击事件onMouseDown鼠标上的按钮被按下了onMouseUp鼠标按下后&#xff0c;松开时激发的事件onMouseOver当鼠标移动到某对象范围的上方时触发的事件onMouseMove鼠标移动时…

chrome 网页重新加载_在Chrome中为各个网页设置自定义重新加载时间

chrome 网页重新加载Do you have a webpage that needs to be reloaded every so often or perhaps you have multiple webpages that each need their own individual reload time? Now you can have the best of both with the AutoReloader extension for Google Chrome. 您…

VMware Tools安装和卸载

1、卸载 a.查找 vmware-uninstall-tools.pl 路径&#xff1a;sudo find / -name vmware-uninstall-tools.pl b.切换到 vmware-unistall-tools.pl 目录&#xff1a;cd /usr/bin/ c.卸载&#xff1a;sudo perl vmware-uninstall-tools.pl 2、安装 a.挂载&#xff1a;sudo mount /…

MySQL解决方案

主从复制与主主复制怎么自动切换&#xff1a;使用Keepalived 日常如何导出数据&#xff1a;mysqldump、xtrabackup 主库宕机解决方案&#xff08;一主多从&#xff09; 登陆从库>show processlist\G; #cat /data/3306/data/master.info #cat /data/3307/data/master.ii…

iphone解锁_有人可以用解锁的iPhone做的最糟糕的事情是什么?

iphone解锁Dedi Grigoroiu/Shutterstock.comDedi Grigoroiu / Shutterstock.comWe use our phones for event tickets, reservations, insurance cards, and even driver’s licenses. But what happens when someone takes your unlocked iPhone out of view for a moment—wh…

Alamofire源码导读二:发起请求及内部加锁的逻辑

以创建一个 DataRequest 为例子 &#xfffc; 发起请求 创建 SessionManager 顺带也创建了一个 SessionDelegate 持有一个urlSession&#xff0c;持有一个串行的 DispatchQueue A。注意&#xff0c;这个不是urlSession 回调方法执行时所在的OperationQueue 创建 Requestable 的…

python os.path模块

os.path.abspath(path) #返回绝对路径os.path.basename(path) #返回文件名os.path.commonprefix(list) #返回list(多个路径)中&#xff0c;所有path共有的最长的路径。os.path.dirname(path) #返回文件路径os.path.exists(path) #路径存在则返回True,路径损坏返回Falseos.path…

让动画每次重复前都有延迟

动画不从0%开始即可 keyframes textmove {20% {transform: translateX(0);}100% {transform: translateX(-100%);} }

bixby映射软件下载_如何在Samsung Galaxy S8,S9,S10,Note 8或Note 9上重新映射Bixby按钮...

bixby映射软件下载We’ve said before, and we’ll say it again: Bixby sucks. You’re better off using Google Assistant any day of the week. The good news is, it’s now possible to remap the pointless Bixby button without using a third-party app. 我们之前已经…

JavaScript数据结构和算法

前言 在过去的几年中&#xff0c;得益于Node.js的兴起&#xff0c;JavaScript越来越广泛地用于服务器端编程。鉴于JavaScript语言已经走出了浏览器&#xff0c;程序员发现他们需要更多传统语言&#xff08;比如C和Java&#xff09;提供的工具。这些工具包括传统的数据结构&…

选择器

// 什么是 HTML 以及怎样使用 HTML 编写网页 // 网页的结构是怎样 // 什么是 CSS 以及怎样使用 CSS // 如何在网页中引入 JavaScript 代码 // 什么是 DOM, 常用 DOM API 使用 // document object model // application program interface // 什么是事件, 如何绑定事件 // // 应…

vue3打包后无法加载页面

1、配置输出路径 // vue.config.js module.exports {publicPath: ./ }2、不能使用history路由 // ... export default new Router({// mode: history, routes: [{path: /,name: home,component: Home}] })

如何使用Avira Rescue CD清洁感染的PC

When you’ve got a PC completely infected with viruses, sometimes it’s best to reboot into a rescue disc and run a full virus scan from there. Here’s how to use the Avira Rescue CD to clean an infected PC. 当您的PC完全感染了病毒时&#xff0c;有时最好重新…

汇编语言第二章总结

第二章 寄存器 (1) 字数据在寄存器中的存放 一个字由两个字节组成&#xff0c;可以存在一个16位寄存器中。 字的高8位 → 存放于通用寄存器的高8位寄存器 字的低8位 → 存放于通用寄存器的低8位寄存器。 例&#xff1a;十进制数据&#xff1a; 20000 → AX 对应的二进制…

Vue组件的三种调用方式

最近在写fj-service-system的时候&#xff0c;遇到了一些问题。那就是我有些组件&#xff0c;比如Dialog、Message这样的组件&#xff0c;是引入三方组件库&#xff0c;比如element-ui这样的&#xff0c;还是自己实现一个&#xff1f;虽然它们有按需引入的功能&#xff0c;但是…