【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.pswp.cn/news/278630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278630.shtml
英文地址,請注明出處:http://en.pswp.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;但是…