zoukankan      html  css  js  c++  java
  • bzoj 1856 组合

      这道题有些类似卡特兰数的其中一种证明,总方案数是c(n+m,n),点(m,n)对应y=x-1对称点为(n+1,m-1),所以答案为c(n+m,n)-c(n+m,n+1)。

      反思:开始坐标轴画错了,结果得到的是c(n+m,n-1),然后就错了= =。

     

    /**************************************************************
        Problem: 1856
        User: BLADEVIL
        Language: C++
        Result: Accepted
        Time:5220 ms
        Memory:804 kb
    ****************************************************************/
     
    //By BLADEVIL
    #include <cstdio>
    #define d39 20100403
    #define LL long long
     
    using namespace std;
     
    int n,m;
     
    int pw(int x,int p) {
        int ans=1;
        while (p) {
            if (p&1) ans=((LL)ans*x)%d39;
            x=((LL)x*x)%d39;
            p>>=1;
        }
        return ans;
    }
     
    int c(int n,int m) {
        int ans=1;
        for (int i=m+1;i<=n;i++) ans=((LL)ans*i)%d39;
        for (int i=1;i<=n-m;i++) ans=((LL)ans*pw(i,d39-2))%d39; 
        return ans;
    }
     
    int main() {
        scanf("%d%d",&n,&m);
        printf("%d
    ",(c(n+m,n)-c(n+m,n+1)+d39)%d39);
        return 0;
    }
  • 相关阅读:
    export和import实现模块化
    Net Core
    DockerCon 2016
    NET Core 构成体系
    Cloud Engine
    JVM内存结构
    Signalr
    Rabbit.Rpc
    遍历指定包名下所有的类(支持jar)(转)
    httpd的简单配置(转)
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3632556.html
Copyright © 2011-2022 走看看