2018.11.1每天認真做一道數學(數論)題之UOJ #273. BZOJ 4735【清華集訓2016】你的生命已如風中殘燭【組合數學】

“這道題怎麼做啊…只會10%的狀壓啊”
“wxh用狀壓過了”
“…”

然後我苦苦思索仍然無解,去膜了題解之後才弄懂。

我們把這mm個數都1-1,於是變成了求這m!m!個排列中有多少排列滿足所有前綴和0\geq 0

容易同加油站的題一樣證明,這樣滿足條件的循環同構的解是惟一的。

再考慮最底下一張牌,得出答案:ans=m!m+1nans=\frac{m!}{m+1-n}

#include <bits/stdc++.h>
#define ll long long
using namespace std;

const ll N=1e2+5;
const ll Inf=1e18;
const ll Mod=998244353;

ll n,m,ans=1,w[N];

inline ll mul(ll x,ll y) {
	return x*y%Mod;
}

int main() {
	scanf("%lld",&n);
	
	for(ll i=1;i<=n;i++) scanf("%lld",&w[i]),m+=w[i];
	
	for(ll i=1;i<=m;i++) if(i^(m+1-n)) 	ans=mul(ans,i);
	
	printf("%lld\n",ans);
	
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章