hdu3037 Saving Beans(Lucas定理)
题意: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定理)的更多相关文章
- hdu 3037 Saving Beans Lucas定理
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- HDU 3037 Saving Beans(Lucas定理的直接应用)
解题思路: 直接求C(n+m , m) % p , 由于n , m ,p都非常大,所以要用Lucas定理来解决大组合数取模的问题. #include <string.h> #include ...
- HDU3037 Saving Beans(Lucas定理+乘法逆元)
题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...
- [HDU3037]Saving Beans,插板法+lucas定理
[基本解题思路] 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个“档板”插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号分到对应位置的几个元 ...
- hdu3037 Saving Beans
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pro ...
- Hdu 3037 Saving Beans(Lucus定理+乘法逆元)
Saving Beans Time Limit: 3000 MS Memory Limit: 32768 K Problem Description Although winter is far aw ...
- HDU 3037 Saving Beans (数论,Lucas定理)
题意:问用不超过 m 颗种子放到 n 棵树中,有多少种方法. 析:题意可以转化为 x1 + x2 + .. + xn = m,有多少种解,然后运用组合的知识就能得到答案就是 C(n+m, m). 然后 ...
- 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个 ...
随机推荐
- JS选中清空
var inputArray = document.getElementsByTagName("input"); var strArray = []; ; i < input ...
- android基础---->音频和视频的使用
Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目 ...
- 谈谈后台服务的RPC和路由管理
版权声明:本文由廖念波原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/147 来源:腾云阁 https://www.qclo ...
- linux下php安装
nginx中配置php: http://www.111cn.net/sys/nginx/64044.htm
- mysql动态sql 整理多个字段
原始表: 整理后的表: 方案一(动态sql): BEGIN #Routine body goes here... DECLARE v1 ); DECLARE v2 ); #DECLARE v3 VAR ...
- Linux系统下 MongoDB安装搭建
1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # tar -zxvf mongodb-3.4.2 ...
- CodeForces 651 C Watchmen
C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
- [Haskell]解决hslua unknown symbol `___s trtod'的问题
用cabal编译libpandoc时遇到这样的错误: HShslua-0.3.12.o: unknown symbol `___s trtod' ghc.exe: unable to load pac ...
- Python大数据:外部数据获取(网页抓取)
import urllib2 as url import cookielib,StringIO,gzip,json import pandas as pd import numpy as np #定义 ...
- Oracle性能优化之 Oracle里的优化器
优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...