zoukankan      html  css  js  c++  java
  • luoguP1641 [SCOI2010]生成字符串 组合

    可以将问题抽象成选 1 就向右走,选 0 就向上走,且不能经过 y=x+1 的方案数.    

    考虑容斥:总-不合法.   

    总方案数就是 $inom{n+m}{n}$,然后不合法的方案数对于 y=x+1 对称后发现就是 $(-1,1)$ 走到 $(n,m)$ 的方案数.  

    code: 

    #include <bits/stdc++.h>       
    #define N 2000009  
    #define ll long long 
    #define mod 20100403
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std; 
    int fac[N],inv[N];  
    void init() {  
        fac[0]=1;  
        for(int i=1;i<N;++i) fac[i]=(ll)fac[i-1]*i%mod;  
        inv[1]=1;                   
        for(int i=2;i<N;++i) inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;   
        for(int i=2;i<N;++i) inv[i]=(ll)inv[i]*inv[i-1]%mod;  
        inv[0]=1;  
    }  
    int C(int x,int y)  { 
        return (x<0||y<0||x<y)?0:(ll)fac[x]*inv[y]%mod*inv[x-y]%mod;  
    }
    int main() {  
        // setIO("input");     
        int n,m;  
        init();  
        scanf("%d%d",&n,&m);        
        printf("%d
    ",(ll)(C(n+m,n)+mod-C(n+m,n+1))%mod);   
        return 0;
    }
    

      

  • 相关阅读:
    030-B+树(三)
    028-B+树(一)
    027-B树(二)
    026-B树(一)
    025-红黑树(六)
    024-红黑树(五)
    023-红黑树(四)
    022-红黑树(三)
    021-红黑树(二)
    020-红黑树(一)
  • 原文地址:https://www.cnblogs.com/guangheli/p/13237556.html
Copyright © 2011-2022 走看看