“这道题怎么做啊…只会10%的状压啊”
“wxh用状压过了”
“…”
然后我苦苦思索仍然无解,去膜了题解之后才弄懂。
我们把这个数都,于是变成了求这个排列中有多少排列满足所有前缀和
容易同加油站的题一样证明,这样满足条件的循环同构的解是惟一的。
再考虑最底下一张牌,得出答案:
#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;
}