题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1537

思路:一开始用二项式拆了一下,发现这个式子的形式总能变成a+b*sqrt(2)的形式。然后就列了几个。

1+1*sqrt(2)

3+2*sqrt(2)

7+5*sqrt(2)

17+12*sqrt(2)

挺明显的:ai=ai-1+2*bi-1,bi=ai-1+bi-1。

转移的矩阵:

1 2

1 1

起初我是怀疑这个题是有bug的,因为输出的结果要取模,但是我的代码是求出了未平方的值,但是这个时候如果平方溢出了呢?再取模会不会有问题?不过仔细一想,平方后对1e9+7取模结果一定小于它,所以它们的相对位置是统一的。推算出结果,判断一发a和b的顺序就行了。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long LL;
  5. const LL mod = (LL)1e9+;
  6. const int maxn = ;
  7. LL n;
  8.  
  9. typedef struct Matrix {
  10. LL m[maxn][maxn];
  11. int r;
  12. int c;
  13. Matrix(){
  14. r = c = ;
  15. memset(m, , sizeof(m));
  16. }
  17. } Matrix;
  18.  
  19. Matrix mul(Matrix m1, Matrix m2) {
  20. Matrix ans = Matrix();
  21. ans.r = m1.r;
  22. ans.c = m2.c;
  23. for(int i = ; i <= m1.r; i++) {
  24. for(int j = ; j <= m2.r; j++) {
  25. for(int k = ; k <= m2.c; k++) {
  26. if(m2.m[j][k] == ) continue;
  27. ans.m[i][k] = ((ans.m[i][k] + m1.m[i][j] * m2.m[j][k] % mod) % mod) % mod;
  28. }
  29. }
  30. }
  31. return ans;
  32. }
  33.  
  34. Matrix quickmul(Matrix m, LL n) {
  35. Matrix ans = Matrix();
  36. for(int i = ; i <= m.r; i++) {
  37. ans.m[i][i] = ;
  38. }
  39. ans.r = m.r;
  40. ans.c = m.c;
  41. while(n) {
  42. if(n & ) ans = mul(m, ans);
  43. m = mul(m, m);
  44. n >>= ;
  45. }
  46. return ans;
  47. }
  48.  
  49. int main() {
  50. //freopen("in", "r", stdin);
  51. while(~scanf("%lld", &n)) {
  52. Matrix p; p.c = ; p.r = ;
  53. p.m[][] = ; p.m[][] = ;
  54. p.m[][] = ; p.m[][] = ;
  55. Matrix q = quickmul(p, n);
  56. LL a = q.m[][], b = q.m[][];
  57. a = (a * a) % mod;
  58. b = (((b * b) % mod) * ) % mod;
  59. if(a == b + ) printf("%lld\n", a);
  60. else if(a + == b) printf("%lld\n", b);
  61. else puts("no");
  62. }
  63. return ;
  64. }

[51NOD1537] 分解(递推,矩阵快速幂)的更多相关文章

  1. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  2. hdu 2604 递推 矩阵快速幂

    HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...

  3. HDU 2842 (递推+矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...

  4. Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)

    题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...

  5. HDU6030 Happy Necklace(递推+矩阵快速幂)

    传送门:点我 Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of ...

  6. 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)

    题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...

  7. LightOJ 1244 - Tiles 猜递推+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...

  8. [递推+矩阵快速幂]Codeforces 1117D - Magic Gems

    传送门:Educational Codeforces Round 60 – D   题意: 给定N,M(n <1e18,m <= 100) 一个magic gem可以分裂成M个普通的gem ...

  9. 2017中国大学生程序设计竞赛 - 女生专场 Happy Necklace(递推+矩阵快速幂)

    Happy Necklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  10. [hdu 2604] Queuing 递推 矩阵快速幂

    Problem Description Queues and Priority Queues are data structures which are known to most computer ...

随机推荐

  1. Python for z/OS

    Install pythondev Install DB2 or server driver package easy_install ibm_db Get license file from tor ...

  2. Android SDK Manager更新报错

    错误log: Fetching https://dl-ssl.google.com/android/repository/addons_list-.xml Fetched Add-ons List s ...

  3. POJ - 2041Unreliable Message

    这里的算法非常简单,就是“模拟”,注意编写每个传令官的算法时先分开测试,放在一起就会混淆. POJ - 2041Unreliable Message Time Limit: 1000MS Memory ...

  4. React组件开发

    目录: 属性:props 内联样式 状态记忆 : state 生命周期 访问DOM 表单输入 承接快速入门篇:http://www.cnblogs.com/jasonnode/p/4444504.ht ...

  5. SQL Server 最小化日志操作解析,应用

    Sql Server 中数据库在BULK_LOGGED/SIMPLE模式下的一些操作会采用最小化日志的记录方式,以减小tran log落盘日志量从而提高整体性能. 这里我简单介绍下哪些操作在什么样的情 ...

  6. selenium webdriver设置超时

    webdriver类中有三个和时间相关的方法: 1.pageLoadTimeout 2.setScriptTimeout 3.implicitlyWait pageLoadTimeout from s ...

  7. 160223、jquery中attr和prop的区别

    在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: ...

  8. jeditable参数详解

    一.导入js文件 <script type="text/javascript" src="jquery-1.10.2.min.js"></sc ...

  9. 实现Ecshop商品跳到淘宝、京东等的购买链接

    今天简单的实现了一下ecshop商品导出到第三方的购买链接功能.大致思路是给商品添加一个buy_link的text字段,存为json结构,然后通过json解析输出到商品购买页面 1.添加字段 增加购买 ...

  10. js 闭包理解

    闭包主要应用于两种情况: 1 函数作为返回值. 2 函数作为参数传递. 第一种举例: function fn(){ var max = 10; return function bar(){ if(x ...