zoukankan      html  css  js  c++  java
  • 【洛谷 P1641】 [SCOI2010]生成字符串(Catalan数)

    题目链接
    可以看成在坐标系中从((0,0))(n+m)步走到((n+m,n-m))的方案数,只能向右上((1))或者右下((0))走,而且不能走到(y=-1)这条直线上。
    不考虑最后那个限制条件的话就是(n+m)次中选(m)次往右下走,即(C(n+m,m))
    然后根据对称原理,从((0,0))走到(y=-1)上就相当于从((0,-2))走到(y=-1)上,其方案数是一样的,所以经过(y=-1)的方案数其实就是从((0,-2))走到((n+m,n-m))的方案数,也就是(C(n+m,m-1))
    所以这题唯一的标签“逆元”也只是用来求组合数的而已。

    #include <cstdio>
    #define ll long long
    int n, m;
    const int MOD = 20100403;
    void exgcd(ll &x, ll &y, ll a, ll b){
    	if(!b){ x = 1; y = 0; return; }
    	exgcd(x, y, b, a % b);
    	ll z = x; x = y; y = z - a / b * y;
    }
    int fact[2000010];
    ll x, y, X, Y;
    int C(int n, int m){
    	exgcd(x, y, fact[m], MOD); exgcd(X, Y, fact[n - m], MOD);
    	return ((ll)fact[n] * x % MOD * X % MOD + MOD) % MOD;
    }
    int main(){
    	fact[0] = 1;
    	scanf("%d%d", &n, &m);
    	for(int i = 1; i <= 2000000; ++i)
    		fact[i] = (ll)fact[i - 1] * i % MOD;
    	printf("%d
    ", ((C(n + m, m) - C(n + m, m - 1)) % MOD + MOD) % MOD);
    	return 0;
    }
    
  • 相关阅读:
    .NET版UEditor报请求后台配置项http错误,上传功能无法使用的错误解决
    [Asp.net mvc]Asp.net mvc 中使用LocalStorage
    Asp.net mvc Kendo UI Grid的使用(三)
    [Asp.net mvc]Asp.net mvc 使用Json传递数据
    Asp.net mvc Kendo UI Grid的使用(二)
    接口
    结构
    多态
    继承
    方法
  • 原文地址:https://www.cnblogs.com/Qihoo360/p/11228270.html
Copyright © 2011-2022 走看看