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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • myeclipse软件下载_eclipse手机版

    myeclipse软件下载_eclipse手机版myeclipse官方下载:官方站点下载:downme(MyEclipseEnterpriseWorkbench8.0forEclipse3.5.1andWindows98/2000/NT/XP/Vista/7(11/23/2009))说明:已包含Elipse和JRE,无需安装其他即可运行的ALL-in-ONE版本)Version:8.0GA|Fil

    2022年9月26日
    0
  • 根据bak还原数据库,备份集中的数据库与现有数据库“XXX”数据库不同

    根据bak还原数据库,备份集中的数据库与现有数据库“XXX”数据库不同在做数据库相关的日常工作中,还原与备份数据库会经常遇到,有时候同样的sql2008备份的数据库,从别人那边备份的数据库文件,在自己的电脑上还原会出现:的错误。解决方法有两种:第一种:右键数据库点击还原数据库,填上需要还原的数据库名,就可以直接还原了。第二种:在新建的数据库上还原数据库时,选好备份文件后,勾选上覆盖现有数据库即可。原文地址:https://blog.csdn.net/sushena/…

    2022年5月10日
    39
  • android toast显示时间,Android Toast自定义显示时间「建议收藏」

    android toast显示时间,Android Toast自定义显示时间「建议收藏」Toast是Android中使用频率较高的弹窗提示手段,使用起来简单、方便。常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。虽然Toast中有setDuration(intduration)接口,但是跟踪代码发现,设置的时间没起作用,只有系统默认的两个时间LENGTH_D…

    2022年9月13日
    0
  • centos安装wget(很简单)

    centos安装wget(很简单)centos安装wget(很简单)yum-yinstallwgetyum-yinstallsetupyum-yinstallperlSearchingforGCC…Thepath""isnotvalidpathtothegccbinary.Wouldyouliketochangeit?[yes]如果出现这个就表明gcc没有安装yum…

    2022年10月17日
    0
  • js 数组倒序排列

    <!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><title>js倒序排列</title></head><body><script>vararray=[‘我’,’喜’,’欢’,…

    2022年4月4日
    84
  • java重写和重载的区别总结_java覆盖和重载

    java重写和重载的区别总结_java覆盖和重载重写只存在于子类与父类中,重载存在于一个类中。具体区别如下:一、重写(override)override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。重写(覆盖)的规则:1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protecte…

    2022年9月3日
    2

发表回复

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

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