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

Codeforces Round #436 E. Fire(背包dp+输出路径)

codeforces581D