acm.hdu.edu.cn/showproblem.php?pid=3037

【题意】

  • m个松果,n棵树
  • 求把最多m个松果分配到最多n棵树的方案数
  • 方案数有可能很大,模素数p
  • 1 <= n, m <= 1000000000, 1 < p < 100000

【思路】

  • 答案为C(n+m,m)%p
  • 对于C(n, m) mod p。这里的n,m,p(p为素数)都很大的情况。就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了。这里用到Lucas定理。

  • 下面证明为什么答案是C(n+m,m):

  • 把i个松果分配到最多n棵树的方案数是:C(i+n-1,i)(相当于x1+x2+......+xn=i的解的个数,用插板法,插n-1个板,共i+n-1个位置选i个1,因为xi可能是0,所以满足最多n棵树)
  • 现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k-1)得

    C(n-1,0)+C(n,1)+...+C(n+m-1,m)

    = C(n,0)+C(n,1)+C(n+1,2)+...+C(n+m-1,m)

    = C(n+m,m)

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll n,m,p; ll fpow(ll x,ll n,ll p)
{
ll res=;
while(n)
{
if(n&) res=(res*x)%p;
x=(x*x)%p;
n>>=;
}
return res;
}
ll Comb(ll n,ll m,ll p)
{
if(n<m) return ;
if(n==m) return ;
m=min(m,n-m);
ll lm=,ln=;
for(ll i=;i<m;i++)
{
lm=(lm*(m-i))%p;
ln=(ln*(n-i))%p;
}
ll ans=ln*fpow(lm,p-,p)%p;
return ans;
}
ll Lucas(ll n,ll m,ll p)
{
ll ans=;
while(n&&m&&ans)
{
ans=(ans*Comb(n%p,m%p,p))%p;
n/=p;
m/=p;
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld",&n,&m,&p);
n+=m;
ll ans=Lucas(n,m,p);
printf("%lld\n",ans);
}
return ;
}

Lucas模板

最新文章

  1. 探索逻辑事务 TransactionScope
  2. python list dict 去重的两种方式
  3. Linux 命令积累
  4. sujection重构
  5. sql server日期时间转字符串
  6. Mandelbrot和Julia
  7. android 学习运用海马模拟器教程与android环境的搭建
  8. [Effective JavaScript 笔记]第46条:使用数组而不要使用字典来存储有序集合
  9. MySQL Show命令的使用
  10. Codeforces 353D Queue(构造法)
  11. nginx+lua+redis构建高并发应用(转)
  12. 图解:SQL Server SSIS包和job的部署攻略
  13. IOS数据持久化之归档NSKeyedArchiver
  14. mssql sqlserver with cte表达式(递归)找出最顶值的方法分享
  15. ubuntu下编译qt5
  16. 【笔试题】在 Java 中,如何跳出当前的多重嵌套循环?
  17. 腾讯云安装Hadoop遇到的问题
  18. Mayi_XPath编写规则学习
  19. test20181015 B 君的第三题
  20. mysql 在linux服务器恢复数据表方法记录

热门文章

  1. codevs 1131 统计单词数 2011年NOIP全国联赛普及组
  2. search bar 自定义背景
  3. Windows MinGW 64-bit boost 踩坑
  4. [置顶] IIS应用程序池多工作进程设置及Session共享
  5. Oracle数据库同步方案
  6. ios 检查内存泄露
  7. NFS网络共享服务 挂载参数及优化 内核优化建议
  8. 图像分割loss集合
  9. iOS使用Reveal分析他人app界面
  10. java各种数据库连接