Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums
Posted Lnn.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums相关的知识,希望对你有一定的参考价值。
前言:好一个问题转换。
题目传送门
题目类型:路径、卡特兰数。
解析: 参考了%%%大佬的题解
基本的推导见上面的博客。
解释推导中的几个问题。
1.为什么C(2n,n-1)就是不合法的部分?不会多或者少吗?
答:想到达(n-1,n+1)无论如何都会经过对角线上面的那条线k1。所有到k1的路径,向右x-1次,向上x次到(n-1,n+1);向右x次,向上x-1次到(n,n)。因为是所有到k1的路径,所以不合法和到(n-1,n+1)是等价的。
code:
#include <bits\\stdc++.h>
#define Lnnnb return 0;
#define ll long long
#define maxn 4040
#define mod 998244853
using namespace std;
void eninit();
ll n,m,c[maxn][maxn];
void scan()
cin >> n >> m ;
void solve()
c[0][0] = 1;
for(ll i = 1 ; i <= n+m ; ++i)
c[i][0] = 1;
for(ll j = 1 ; j <= i ; ++j)
c[i][j] = (c[i-1][j] + c[i-1][j-1]) %mod;
ll ans = 0 , las = (c[n+m][n] - c[n+m][n - max(1ll*1,n-m)] + mod)%mod;
for(ll i = max(1ll*1,n-m) ; i <= n ; ++i) ///最大前缀和不可能小过n - m
ll now = ( c[n+m][n] - c[n+m][n-i-1] - las + mod )%mod;
ans = (ans + now*i )%mod;
las += now;
cout << ans << endl ;
int main()
ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
scan();
solve();
Lnnnb
void eninit()
以上是关于Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学
Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums
Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums
Codeforces Round #581 (Div. 2) E. Natasha, Sasha and the Prefix Sums