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;
    }
  • 相关阅读:
    计算机二级Python
    vivado三人表决仿真
    verilog设计加法器
    超前进位加法器
    OO第二单元总结
    OO第一单元总结
    第一次阅读作业
    安卓计算器
    安卓第四周作业
    第十四周作业
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3632556.html
Copyright © 2011-2022 走看看