日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P6672-[清华集训2016]你的生命已如风中残烛【结论】

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P6672-[清华集训2016]你的生命已如风中残烛【结论】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P6672


題目大意

長度為mmm的序列aaa,有nnn個數字不是000,其他m?nm-nm?n個是000。要求重排后有多少方案滿足
?x,∑i=1xai≥i\forall x,\sum_{i=1}^xa_i\geq i?x,i=1x?ai?i
其中m=∑i=1naim=\sum_{i=1}^{n}a_im=i=1n?ai?

1≤n≤40,1≤ai≤1051\leq n\leq 40,1\leq a_i\leq 10^51n40,1ai?105


解題思路

具體數學P301頁有一個ReneyReneyReney引理(雖然我還沒看到):
假設一個整數序列何為111,那么它的所有循環位移中有且僅有一個滿足所有的前綴和為+1+1+1

然后考慮這題,都減去一的話就是要求都為非負了,而且所有數的和為000

怎么轉換成上面那種情況,加一個進去111的話不是很行,因為有很多正數所以我們不能保證這個111排在最前面。

反著考慮,把所有數取反再加一個111的話就可以了,因為這樣正數就只有111了。

所以的話它的圓排列個數就是m!m!m!個了,但是多了一個?1-1?1我們要減去這個?1-1?1的影響,其實就是多塞一個?1-1?1進去的話,就是多了m?n+1m-n+1m?n+1個了。所以答案就是
m!m?n+1\frac{m!}{m-n+1}m?n+1m!?


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll P=998244353; ll n,m,ans; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans; } signed main() {scanf("%lld",&n);for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);m+=x;}ans=1;for(ll i=1;i<=m;i++)ans=ans*i%P;printf("%lld\n",ans*power(m-n+1,P-2)%P);return 0; }

總結

以上是生活随笔為你收集整理的P6672-[清华集训2016]你的生命已如风中残烛【结论】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。