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. JS选中清空

    var inputArray = document.getElementsByTagName("input"); var strArray = []; ; i < input ...

  2. android基础---->音频和视频的使用

    Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目 ...

  3. 谈谈后台服务的RPC和路由管理

    版权声明:本文由廖念波原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/147 来源:腾云阁 https://www.qclo ...

  4. linux下php安装

    nginx中配置php:  http://www.111cn.net/sys/nginx/64044.htm

  5. mysql动态sql 整理多个字段

    原始表: 整理后的表: 方案一(动态sql): BEGIN #Routine body goes here... DECLARE v1 ); DECLARE v2 ); #DECLARE v3 VAR ...

  6. Linux系统下 MongoDB安装搭建

    1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # tar -zxvf mongodb-3.4.2 ...

  7. CodeForces 651 C Watchmen

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  8. [Haskell]解决hslua unknown symbol `___s trtod'的问题

    用cabal编译libpandoc时遇到这样的错误: HShslua-0.3.12.o: unknown symbol `___s trtod' ghc.exe: unable to load pac ...

  9. Python大数据:外部数据获取(网页抓取)

    import urllib2 as url import cookielib,StringIO,gzip,json import pandas as pd import numpy as np #定义 ...

  10. Oracle性能优化之 Oracle里的优化器

    优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...