题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3483

A Very Simple Problem

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 945    Accepted Submission(s): 471

Problem Description
This is a very simple problem. Given three integers N, x, and M, your task is to calculate out the following value:

 
Input
There are several test cases. For each case, there is a line with three integers N, x, and M, where 1 ≤ N, M ≤ 2*109, and 1 ≤ x ≤ 50.
The input ends up with three negative numbers, which should not be processed as a case.
 
Output
For each test case, print a line with an integer indicating the result.
 
Sample Input
100 1 10000
3 4 1000
-1 -1 -1
 
Sample Output
5050
444
 
Source
 
  1. //计算排列数(杨辉三角)
  2. //C(m,n) = C(m-1,n-1)+C(m-1,n)
  3. //快速幂
  4. /*
  5. * [题意]
  6. * 输入n, x, m
  7. * 求(1^x)*(x^1)+(2^x)*(x^2)+(3^x)*(x^3)+...+(n^x)*(x^n)
  8. * [解题方法]
  9. * 设f[n] = [x^n, n*(x^n), (n^2)*(x^n),..., (n^x)*(x^n)]
  10. * 则f[n][k] = (n^k)*(x^n)
  11. * 问题转化为求:( g[n] = f[1][x]+f[2][x]+...+f[n][x] )
  12. * 设C(i,j)为组合数,即i种元素取j种的方法数
  13. * 所以有:f[n+1][k] = ((n+1)^k)*(x^(n+1)) (二次多项式展开)
  14. * = x*( C(k,0)*(x^n) +C(k,1)*n*(x^n)+...+C(k,k)*(n^k)*(x^n) )
  15. * = x*( C(k,0)*f[n][0]+C(k,1)*f[n][1]+...+C(k,k)*f[n][k] )
  16. * 所以得:
  17. * |x*1 0................................0| |f[n][0]| |f[n+1][0]|
  18. * |x*1 x*1 0............................0| |f[n][1]| |f[n+1][1]|
  19. * |x*1 x*2 x*1 0........................0| * |f[n][2]| = |f[n+1][2]|
  20. * |......................................| |.......| |.........|
  21. * |x*1 x*C(k,1) x*C(k,2)...x*C(k,x) 0...0| |f[n][k]| |f[n+1][k]|
  22. * |......................................| |.......| |.........|
  23. * |x*1 x*C(x,1) x*C(x,2).......x*C(x,x) 0| |f[n][x]| |f[n+1][x]|
  24. * |0................................0 1 1| |g[n-1] | | g[ n ] |
  25. */
  26. #include<cstdio>
  27. #include<cstring>
  28. #include<cmath>
  29. #include<algorithm>
  30. using namespace std;
  31. #define ll long long
  32. const ll maxn = ;
  33. ll c[maxn][maxn];
  34. ll n, mod, x, m;
  35. struct Mat{
  36. ll f[maxn][maxn];
  37. };
  38. void init()
  39. {
  40. ll i,j,k;
  41. c[][] = c[][] = c[][] = ;
  42. for(i = ; i < maxn; i++){
  43. c[i][] = c[i][i] = ;
  44. for(j = ; j < i; j++){
  45. c[i][j] = c[i-][j]+c[i-][j-];
  46. }
  47. }
  48. }
  49. Mat operator *(Mat a, Mat b)
  50. {
  51. ll i, j, k;
  52. Mat c;
  53. memset(c.f,,sizeof(c.f));
  54. for(k = ; k < m; k++){
  55. for(i = ; i < m; i++){
  56. for(j = ; j < m; j++){
  57. if(!b.f[k][j]) continue;
  58. c.f[i][j] = (c.f[i][j]+(a.f[i][k]*b.f[k][j])%mod)%mod;
  59. }
  60. }
  61. }
  62. return c;
  63. }
  64. Mat multi(Mat a,ll b)
  65. {
  66. Mat s;
  67. memset(s.f,,sizeof(s.f));
  68. for(int i = ; i < m; i++){
  69. s.f[i][i] = ;
  70. }
  71. while(b){
  72. if(b&) s = s*a;
  73. a = a*a;
  74. b>>=;
  75. }
  76. return s;
  77. }
  78. int main()
  79. {
  80. init();
  81. while(~scanf("%lld%lld%lld",&n,&x,&mod))
  82. {
  83. if(n<&&x<&&mod<) break;
  84. Mat e;
  85. ll i, j;
  86. ll ans = ;
  87. memset(e.f,,sizeof(e.f));
  88. for(i = ; i <= x; i++){
  89. for(j = i; j <= x; j++){
  90. e.f[j][i] = c[x-i][j-i]*x%mod;
  91. }
  92. }
  93. e.f[][x+] = e.f[x+][x+] = ;
  94. m = x+;
  95. e = multi(e,n);
  96. for(i = ; i < m-; i++) ans = (ans+x*e.f[i][m-])%mod;
  97. printf("%lld\n",(ans+mod)%mod);
  98. }
  99. return ;
  100. }

hdu_3483A Very Simple Problem(C(m,n)+快速幂矩阵)的更多相关文章

  1. hdu_2604Queuing(快速幂矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others)  ...

  2. Number Sequence(快速幂矩阵)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/O ...

  3. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  4. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  5. 快速幂 & 矩阵快速幂

    目录 快速幂 实数快速幂 矩阵快速幂 快速幂 实数快速幂 普通求幂的方法为 O(n) .在一些要求比较严格的题目上很有可能会超时.所以下面来介绍一下快速幂. 快速幂的思想其实是将数分解,即a^b可以分 ...

  6. hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂

    题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...

  7. 整数快速乘法/快速幂+矩阵快速幂+Strassen算法

    快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c  二.矩 ...

  8. jiulianhuan 快速幂--矩阵快速幂

    题目信息: 1471: Jiulianhuan 时间限制: 1 Sec  内存限制: 128 MB 提交: 95  解决: 22 题目描述 For each data set in the input ...

  9. hiho #1143 : 骨牌覆盖问题·一 (运用快速幂矩阵)

    #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然 ...

随机推荐

  1. MySQL时间操作的系统函数用法

    我要查询获得当天凌晨30分的datetime值的方式:select ADDDATE(CURDATE(), INTERVAL TIME_TO_SEC(TIMEDIFF("00:30:00&qu ...

  2. ReactNative实现图集功能

    需求描述: 图片缩放.拖动.长按保存等基础图片查看的功能: 展示每张图片文本描述: 实现效果,如图: 实现步骤 使用第三方插件:react-native-image-zoom-viewer 插件Git ...

  3. 尝试在条件“$(_DeviceSdkVersion) >= 21”中对计算结果为“”而不是数字的“$(_DeviceSdkVersion)

    晚上搞xamarin ,运行xamarin项目好好的,不知道怎么回事,一次运行xamarin android项目的时候,部署失败,以前也是遇到这样的错误. 尝试在条件"$(_DeviceSd ...

  4. 回顾2017系列篇(一):最佳的11篇UI/UX设计文章

    2017已经接近尾声,在这一年中,设计领域发生了诸多变化.也是时候对2017年做一个总结,本文主要是从2017设计文章入手,列出了个人认为2017设计行业里最重要的UI/UX文章的前11名,供大家参考 ...

  5. JS画几何图形之二【圆】

    半径为r的圆上的点p(x,y)与圆心O(x0,y0)的关系: x = x0+rcosA;  y = y0+rsinA ,A为弧度 样例:http://www.zhaojz.com.cn/demo/dr ...

  6. AJAX请求真的不安全么?谈谈Web安全与AJAX的关系。

    开篇三问 AJAX请求真的不安全么? AJAX请求哪里不安全? 怎么样让AJAX请求更安全? 前言 本文包含的内容较多,包括AJAX,CORS,XSS,CSRF等内容,要完整的看完并理解需要付出一定的 ...

  7. 矩阵[雅礼集训 2017 Day1]

    SOL 奇奇怪怪的贪心(你也不要问我为什么) #include<bits/stdc++.h> #define N 1007 int f[N][N],sum,ans,Ha,bo,n,Ans; ...

  8. Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  9. HTML学习 框架

    iframe 在原来的页面嵌入其他页面 <iframe src="其他页面地址" width="宽" height="高" frame ...

  10. SQLServer Agent执行[分发清除: distribution] 无法删除快照文件

    由于之前创建的发布订阅造成严重的性能压力,症状表现为发布订阅表查询产生CMEMTHREAD  suspend等待,由于开发配置每隔十分钟会产生大量的SQLCOMMAND(create table,cr ...