hdu3037 Saving Beans

题意:n个不同的盒子,每个盒子里放一些球(可不放),总球数<=m,求方案数。

$1<=n,m<=1e9,1<p<1e5,p∈prime$


卢卡斯(Lucas)定理(计算组合数 防爆精度)

$lucas(n,m,p)=lucas(n/p,m/p,p)*C(n\%p,m\%p,p)$

$lucas(n,0,p)=1$


老套路,插板法。

设m个球都要放,多一个盒子轻松解决。

根据插板法得方案数$=C(n+m,n)$

跑一遍Lucas.

end.

#include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
typedef long long ll;
int t,n,m,p;
ll fac[];
ll Pow(ll a,int b){
ll res=;
for(;b;b>>=){
if(b&) res=res*a%p;
a=a*a%p;
}return res%p;
}//快速幂求逆元
ll C(int n,int m){return n<m?:fac[n]*Pow(fac[m],p-)%p*Pow(fac[n-m],p-)%p;} //注意n<m判0
ll lucas(int n,int m){
if(!m) return ;
return lucas(n/p,m/p)*C(n%p,m%p)%p;
}
int main(){
scanf("%d",&t); fac[]=;
while(t--){
scanf("%d%d%d",&n,&m,&p);
re int i;
for(i=;i+<=p;i+=){
fac[i]=fac[i-]*i%p;
fac[i+]=fac[i]*(i+)%p;
fac[i+]=fac[i+]*(i+)%p;
fac[i+]=fac[i+]*(i+)%p;
}//循环展开加速
for(;i<=p;++i) fac[i]=fac[i-]*i%p;
printf("%I64d\n",lucas(n+m,n));
}return ;
}

hdu3037 Saving Beans(Lucas定理)的更多相关文章

  1. hdu 3037 Saving Beans Lucas定理

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  3. HDU 3037 Saving Beans(Lucas定理的直接应用)

    解题思路: 直接求C(n+m , m) % p , 由于n , m ,p都非常大,所以要用Lucas定理来解决大组合数取模的问题. #include <string.h> #include ...

  4. HDU3037 Saving Beans(Lucas定理+乘法逆元)

    题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...

  5. [HDU3037]Saving Beans,插板法+lucas定理

    [基本解题思路] 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个“档板”插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号分到对应位置的几个元 ...

  6. hdu3037 Saving Beans

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pro ...

  7. Hdu 3037 Saving Beans(Lucus定理+乘法逆元)

    Saving Beans Time Limit: 3000 MS Memory Limit: 32768 K Problem Description Although winter is far aw ...

  8. HDU 3037 Saving Beans (数论,Lucas定理)

    题意:问用不超过 m 颗种子放到 n 棵树中,有多少种方法. 析:题意可以转化为 x1 + x2 + .. + xn = m,有多少种解,然后运用组合的知识就能得到答案就是 C(n+m, m). 然后 ...

  9. hdu3037 Lucas定理

    Lucas定理 Lucas(n,m,p)=c(n%p,m%p)* Lucas(n/p,m/p,p),其中lucas(n,m,p)=C(n,m)%p (这里的除号是整除) 证明——百度百科 题意:求n个 ...

随机推荐

  1. JQuery自定义用户控件方法汇总

    首先必用 JQuery.fn.extend方法 使用方法: jQuery.fn.extend({}); 其次 相应控件配置参数设置: jQuery.fn.extend({ uploadPreview: ...

  2. Android英文文档翻译系列(5)——VPNService

      API14位于android.net.VpnService 类概述|Class OverviewVpnService is a base class for applications to ext ...

  3. 【BZOJ4418】[Shoi2013]扇形面积并 扫描线+线段树

    [BZOJ4418][Shoi2013]扇形面积并 Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. Input 第一行是三个整数n,m,k.n代表同心扇形的个数,m用 ...

  4. [SQL] 常用查询脚本

    查询哪些存储过程使用了某个表 select b.name from syscomments a,sysobjects b where a.id=b.id and a.text LIKE '%ftblo ...

  5. Unity3D 笔记二 3D模型基础

    一.3D模型基础 1.Hierarchy 显示的是界面上的游戏对象(GameObject),每个游戏对象都有.至少要有一个Camera,点击Camera就可以在Preview中看到摄像机的视角画面.每 ...

  6. Linux定时检测内存,若使用率超过指标,重启Tomcat并清空内存

    cd /usr/local vim cleanCacheTime.sh 把以下代码粘贴进去 #!/bin/bash echo "start SyncCleanCache.sh..." ...

  7. ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named a

    第五章中完整的训练MNIST数据的神经网络模型的程序代码中,直接运行程序的话会遇到以下的错误. 把下面的这行代码 # 计算交叉熵及其平均值 cross_entropy = tf.nn.sparse_s ...

  8. RSA library

  9. Git学习-->GitLab如何屏蔽掉注册功能?

    一.背景 最近发现我在公司内部搭建的GitLab平台上关于账号出现了以下几个问题: 莫名其妙出现很多陌生人的账号 团队成员的很多账户注册填写的Email和UserName都不符合规范 本来一开始是打算 ...

  10. Mybatis的WHERE和IF动态

    mapper.xml: <!--查询套餐产品 --> <select id="queryComboProducts" resultType="com.r ...