hdu 3037 Saving Beans(组合数学)

hdu 3037 Saving Beans(组合数学)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

hdu 3037 Saving Beans

题目大意:n个数,和不大于m的情况,结果模掉p,p保证为素数。

解题思路:隔板法,C(nn+m)多选的一块保证了n个数的和小于等于m。可是n,m非常大,所以用到Lucas定理

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;

ll n, m, p;

ll qPow (ll a, ll k) {
    ll ans = 1;

    while (k) {
        if (k&1)
            ans = (ans * a) % p;
        a = (a * a) % p;
        k /= 2;
    }
    return ans;
}

/* long long qPow(long long a, long long k) { if (k == 0) return 1; if (k == 1) return a; long long ans = qPow(a * a % p, k>>1); if (k&1) ans = ans * a % p; return ans; } */

ll C (ll a, ll b) {

    if (a < b)
        return 0;

    if (b > a - b)
        b = a - b;

    ll up = 1, down = 1;

    for (ll i = 0; i < b; i++) {
        up = up * (a-i) % p;
        down = down * (i+1) % p;
    }
    return up * qPow(down, p-2) % p;
}

ll lucas (ll a, ll b, ll p) {
    if (b == 0)
        return 1;
    return C(a%p, b%p) * lucas(a/p, b/p, p) % p;
}

int main () {
    int cas;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%lld%lld%lld", &n, &m, &p);
        printf("%lld\n", lucas(n+m, m, p));
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118868.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cd4与cd8比值的意义 化疗后_艾滋病人的cd8高好还是低好

    cd4与cd8比值的意义 化疗后_艾滋病人的cd8高好还是低好正常情况下CD4/CD8比值介于1.5—2.5之间,如CD4是每微升血750个,CD8是每微升血460个,这样两者的比值就是1.63。虽然95%的正常人CD4/CD8的比值都在1以上,但是也有一些正

    2022年8月1日
    5
  • win7蓝屏错误代码对照表(windows蓝屏合集)

    windows蓝屏错误对照表00×00000000作业完成。10×00000001不正确的函数。20×00000002系统找不到指定的档案。30×00000003系统找不到指定的路径。40×00000004系统无法开启档案。50×00000005拒绝存取。60×00000006无效的代码。70×00000007储存体控制区块已毁。80×00000008储存体空间

    2022年4月15日
    695
  • session.setAttribute报错_java string contains方法

    session.setAttribute报错_java string contains方法HTTPSession在setAttribute时,保存的对象是否需要序列化?查看StandardSession源码中,在setAttribute()中有如下代码if((manager!=null)&amp;&amp;manager.getDistributable()&amp;&amp;!isAttributeDistributable(name…

    2022年10月9日
    0
  • 计算机三级网络技术考过指南

    计算机三级网络技术考过指南原文链接:计算机三级网络技术考过指南题库下载链接(50积分是CSDN上调的,不是我上传时设置的。更新版本请大家自行搜索):计算机三级网络技术无纸化考试模拟软件(2018.3)用Markdown重写后的带完整标签的版本:计算机三级网络技术考过指南(带完整标签版)目录计算机三级网络技术考过指南前言(必读)1.基础准备1.1题库1.2二…

    2022年4月8日
    51
  • oracle amm和asmm,AMM与ASMM

    oracle amm和asmm,AMM与ASMM一、AMM相关知识:1.从oracle11.1开始oracle提供了通过MEMORY_TARGET参数实现自动SGA和PGA自动管理的功能,从此版本开始不再需要明确设置SGA_TARGET及PGA_AGGREGATE_TARGET,这个被支持在linux、windows、solaris、hpux、aix。2.在使用MEMORY_TARGET参数的linux机器上,在oracle启动时遇到ORA-…

    2022年6月7日
    67
  • 正则实现二代身份证号码验证详解[通俗易懂]

    正则实现二代身份证号码验证详解[通俗易懂]最近项目需要对身份证进行比较合理的筛选,并不想用到第三方接口,所以写了个方法:包括支持身份证号合法性验证,支持18位身份证号,支持地址编码、出生日期、校验位验证.基本上这样就可以了.IdCodeValid:function(code){ //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码、出生日期、校验位验证 varcity={11:”北京”,12:”…

    2022年6月27日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号