CF 1204 E Natasha,Sasha and the Prefix Sums(組合せ数学)
1730 ワード
作り方1
(O(nm))は(f(i,j))がi個+1,j個−1に寄与することを考慮した.(f(i-1,j))シーケンスに最初に1つの(1)を追加することを考慮すると、寄与(1times)はシーケンスの個数:(C(j+i-1,i-1)) (f(i,j-1))最初に1つの(-1)を追加することを考慮すると、貢献は(-1times)最大接頭辞と(0)でない個数であり、シーケンス個数が(0)に減少する個数を考慮すると である.
(k(i,j))を(0)とする個数
(i=0:k(i,j)=1)(j=0またはi>j:k(i,j)=0)(ile:k(i,j)=k(i-1,j)+k(i,j-1))は、(1)を一番後ろに、(-1)を一番前に、必ず構成できる
作り方2
(O(n+m))考慮(f(i))は、最も大きなサブシーケンスが(i)である個数を表し、答えは(sumlimits_{i=1}^{n}itimes f(i))である
(g(i))が最も大きいサブシーケンスが(i)より大きい個数であることを考慮すると、明らかに(max(n-m,0)le ile n)は、長(n)高(m)の矩形、上へ行くと(-1)、右へ行くと(+1)、最大接頭辞および少なくとも(i)に抽象化され、ルートは(y=x-i)を通過する必要がある.\(0\le i\le n-m:C(n+m,n)\) (n-m:((0,0))対(y=x-i)対称を考慮すると((i,-i))から((n,m))へのシナリオ数は、(C(n+m,m+k))に変換される.
既知の未知数の数、係数はすべて(1)、および与えられた値であり、未知数は負の数解ではない
Code
(O(nm))は(f(i,j))がi個+1,j個−1に寄与することを考慮した.
(k(i,j))を(0)とする個数
(i=0:k(i,j)=1)(j=0またはi>j:k(i,j)=0)(ile:k(i,j)=k(i-1,j)+k(i,j-1))は、(1)を一番後ろに、(-1)を一番前に、必ず構成できる
作り方2
(O(n+m))考慮(f(i))は、最も大きなサブシーケンスが(i)である個数を表し、答えは(sumlimits_{i=1}^{n}itimes f(i))である
(g(i))が最も大きいサブシーケンスが(i)より大きい個数であることを考慮すると、明らかに(max(n-m,0)le ile n)は、長(n)高(m)の矩形、上へ行くと(-1)、右へ行くと(+1)、最大接頭辞および少なくとも(i)に抽象化され、ルートは(y=x-i)を通過する必要がある.
既知の未知数の数、係数はすべて(1)、および与えられた値であり、未知数は負の数解ではない
Code
#include
typedef long long LL;
const LL maxn=1e4+9,mod=998244853;
LL n,m,ans;
LL fac[maxn],fav[maxn],g[maxn];
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=base*ret%mod;
base=base*base%mod; b>>=1;
}
return ret;
}
inline void Pre(LL N){
fac[0]=1;
for(LL i=1;i<=N;++i) fac[i]=fac[i-1]*i%mod;
// puts("133");
fav[N]=Pow(fac[N],mod-2);
for(LL i=N;i>=1;--i) fav[i-1]=fav[i]*i%mod;
}
inline LL C(LL N,LL M){
return fac[N]*fav[M]%mod*fav[N-M]%mod;
}
inline LL Solve(LL k){
if(k<=n-m) return C(n+m,m);
return C(n+m,m+k);
}
int main(){
scanf("%lld%lld",&n,&m);
Pre(n+m);
// puts("233");
for(LL i=1;i<=n;++i) g[i]=Solve(i); g[n+1]=0;
for(LL i=1;i<=n;++i){
ans=(ans+i*((g[i]-g[i+1]+mod)%mod)%mod)%mod;
}
printf("%lld
",ans);
return 0;
}