• 西电校赛网络赛J题 lucas定理计算组合数


    西电校赛网络赛J题  lucas定理计算组合数

    问题 J: 找规律II

    时间限制: 1 Sec  内存限制: 128 MB 提交: 96  解决: 16 [提交][状态][讨论版]

    题目描述

    现有数阵如下:
     1    2  3   4     5    6
           1   3   6  10  15
                1   4  10   20
                      1   5   15
                            1    6
                                  1
    求这个数阵的第n行m列是多少(行列标号从1开始)
    结果对10007取模

     

    输入

    多组数据,每组数据一行,包含两个整数n,m(1<=n<=m<=10^18)

     

    输出

    每组数据输出一行,为数阵中第n行m列对10007取模后的值。

     

    样例输入

    1 1
    1 2
    1 3
    

    样例输出

    1
    2
    3
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    const int maxn=1000100;
    const int INF=(1<<29);
    const int p=10007;
    
    typedef unsigned long long ll;
    
    ll n,m;
    
    ll qpow(ll n,ll k)
    {
        ll res=1;
        while(k){
            if(k&1) res=(res%p)*(n%p)%p;
            n=(n%p)*(n%p)%p;
            k>>=1;
        }
        return res;
    }
    
    ll C(ll n,ll k)
    {
        if(n<k) return 0;
        ll res=1;
        for(int i=1;i<=k;i++){
            ll a=(n-k+i)%p;
            ll b=i%p;
            res=res*(a*qpow(b,p-2)%p)%p;
        }
        return res%p;
    }
    
    ll lucas(ll n,ll k)
    {
        if(k==0) return 1;
        return (C(n%p,k%p)%p)*(lucas(n/p,k/p)%p)%p;
    }
    
    int main()
    {
        while(cin>>n>>m){
            cout<<lucas(m,n)<<endl;
        }
        return 0;
    }
    View Code
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    java.lang.NoClassDefFoundError: org/apache/poi/ss/formula/udf/UDFFinder
    IntelliJ使用指南—— 深入了解IntelliJ的Web部署逻辑
    javascript深入理解js闭包
    git commit -F时用到的commit.log模板
    github上需要生成密钥对:ssh key
    windows和linux字体库位置
    .vimrc配置文件
    iw交叉编译
    libnl和libopenssl,hostapd交叉编译
    linux中断
  • 原文地址:https://www.cnblogs.com/--560/p/4480959.html
Copyright © 2020-2023  润新知