Description

  1. For any integer i>=3 we have F[i]=(F[i-1]+2*F[i-2]+3*F[i-3])%9901;
  2. Now give you F[0],F[1],F[2],can you tell me the value of F

Input

  1. Fist Line, an integer Q(1<=Q<=100) represent the number of cases;
  2. Every case is a line of four integers:F[0],F[1],F[2],n;
  3. (0<=F[0],F[1],F[2]<9901,0<=n<100000000)

Output

  1. For each case ,you are request to output one integer the value of F[n] in one line.

Sample Input

  1. 4
  2. 1 2 3 3
  3. 4 5 6 5
  4. 2 3 4 2
  5. 4 5 6 100000

Sample Output

  1. 10
  2. 129
  3. 4
  4. 6086

Hint

Source

Dongxu LI

水题,非常easy推出转移矩阵

  1. /*************************************************************************
  2. > File Name: hust1384.cpp
  3. > Author: ALex
  4. > Mail: zchao1995@gmail.com
  5. > Created Time: 2015年03月12日 星期四 13时50分41秒
  6. ************************************************************************/
  7. #include <map>
  8. #include <set>
  9. #include <queue>
  10. #include <stack>
  11. #include <vector>
  12. #include <cmath>
  13. #include <cstdio>
  14. #include <cstdlib>
  15. #include <cstring>
  16. #include <iostream>
  17. #include <algorithm>
  18. using namespace std;
  19. const double pi = acos(-1);
  20. const int inf = 0x3f3f3f3f;
  21. const double eps = 1e-15;
  22. typedef long long LL;
  23. typedef pair <int, int> PLL;
  24. const int mod = 9901;
  25. struct MARTIX
  26. {
  27. int mat[4][4];
  28. MARTIX();
  29. MARTIX operator * (const MARTIX &b)const;
  30. MARTIX& operator = (const MARTIX &b);
  31. };
  32. MARTIX :: MARTIX()
  33. {
  34. memset (mat, 0, sizeof(mat));
  35. }
  36. MARTIX MARTIX :: operator * (const MARTIX &b)const
  37. {
  38. MARTIX res;
  39. for (int i = 0; i < 3; ++i)
  40. {
  41. for (int j = 0; j < 3; ++j)
  42. {
  43. for (int k = 0; k < 3; ++k)
  44. {
  45. res.mat[i][j] += this -> mat[i][k] * b.mat[k][j];
  46. res.mat[i][j] %= mod;
  47. }
  48. }
  49. }
  50. return res;
  51. }
  52. MARTIX& MARTIX :: operator = (const MARTIX &b)
  53. {
  54. for (int i = 0; i < 3; ++i)
  55. {
  56. for (int j = 0; j < 3; ++j)
  57. {
  58. this -> mat[i][j] = b.mat[i][j];
  59. }
  60. }
  61. return *this;
  62. }
  63. MARTIX fastpow (MARTIX ret, int n)
  64. {
  65. MARTIX ans;
  66. ans.mat[0][0] = ans.mat[1][1] = ans.mat[2][2] = 1;
  67. while (n)
  68. {
  69. if (n & 1)
  70. {
  71. ans = ans * ret;
  72. }
  73. ret = ret * ret;
  74. n >>= 1;
  75. }
  76. return ans;
  77. }
  78. void Debug(MARTIX A)
  79. {
  80. for (int i = 0; i < 3; ++i)
  81. {
  82. for (int j = 0; j < 3; ++j)
  83. {
  84. printf("%d ", A.mat[i][j]);
  85. }
  86. printf("\n");
  87. }
  88. }
  89. int F[3];
  90. int main ()
  91. {
  92. int t;
  93. scanf("%d", &t);
  94. while (t--)
  95. {
  96. int n;
  97. scanf("%d%d%d%d", &F[0], &F[1], &F[2], &n);
  98. if (n < 3)
  99. {
  100. printf("%d\n", F[n]);
  101. continue;
  102. }
  103. MARTIX A;
  104. for (int i = 0; i < 3; ++i)
  105. {
  106. A.mat[i][0] = i + 1;
  107. }
  108. A.mat[0][1] = 1;
  109. A.mat[1][2] = 1;
  110. MARTIX F1;
  111. for (int i = 0; i < 3; ++i)
  112. {
  113. F1.mat[0][i] = F[2 - i];
  114. }
  115. MARTIX ans = fastpow(A, n - 2);
  116. ans = F1 * ans;
  117. printf("%d\n", ans.mat[0][0]);
  118. }
  119. return 0;
  120. }

版权声明:本文博主原创文章。博客,未经同意不得转载。

hust1384---The value of F[n]的更多相关文章

  1. Mysql_以案例为基准之查询

    查询数据操作

  2. 在 C# 里使用 F# 的 option 变量

    在使用 C# 与 F# 混合编程的时候(通常是使用 C# 实现 GUI,F#负责数据处理),经常会遇到要判断一个 option 是 None 还是 Some.虽然 Option module 里有 i ...

  3. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

  4. 如果你也会C#,那不妨了解下F#(2):数值运算和流程控制语法

    本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-2.html 一些废话 一门语言火不火,与语言本身并没太大关系,主要看语言的推广. 推广得好,用的 ...

  5. 使用F#开发ASP.NET Core应用程序

    .NET Core 里的F# 在.NET Core刚发布时,就已经添加了对F#的支持.但因为当时F#组件还不完整,而一些依赖包并没有放在Nuget上,而是社区自己放到MyGet上,所以在使用dotne ...

  6. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

    前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...

  7. 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用

    F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...

  8. 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

    函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数\(f(x) = x^2+x\),并没有指定 ...

  9. 如果你也会C#,那不妨了解下F#(3):F#集合类型和其他核心类型

    本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html 在第一篇中,我们介绍了一些基础数据类型,其实那篇标题中不应该含有"F#&q ...

随机推荐

  1. Android-管理Activity生命周期 -暂停和恢复一个Activity

    在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...

  2. 用DOS命令获取文件列表

    其实就是两个命令:dir 跟 tree 在C:盘根目录下生成了一个名为“filelist.txt”的文本文件,该文件中即包含D:盘的文件夹列表. dir d:\ >c:\filelist.txt ...

  3. MongoDB CRUD 基础知识

    建立一个良好的发展环境 环境win8 x64,下载并安装省略.经mongodb 的bin文件夹增加windows的path中,为以后使用方便. c盘新建存储目录:c:/data/db 执行服务:WIN ...

  4. 【Hibernate步步为营】--(一对多映射)之双向关联

    上篇文章讨论了单向关联的一对多映射,在一的一端维护双向的关系这样的做法尽管能实现可是存在非常多缺陷,首先生成非常多多余的SQL语句,由于多的一端不维护关系,仅仅有一的一端维护,在进行操作时一的一端会发 ...

  5. 自己写CPU第九阶段(3)——加载存储指令说明2(swl、swr)

    我们会继续上传新书<q=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99CPU&ie=utf-8&src=se_lighten_quot ...

  6. Kafka logo分布式发布订阅消息系统 Kafka

    分布式发布订阅消息系统 Kafka kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳 ...

  7. js 性能优化整理之 高频优化

    mousemove 拖拽操作 var count = 0; elem.onmousemove = function(){ count++; // 当计数器为偶数的时候不执行mousemove if( ...

  8. 具体解释首页被K后SEOer必做的三大排除方法!

    近段时间.有非常多朋友向新辰抱怨说出大问题了,为神马site不到首页了,并且收录变成了0?唉,新辰不得不非常同情的告诉你:你的首页真的被K了!好了.作为一个职业SEOer.面对被K宛如已经看破红尘般没 ...

  9. dojo加载树错误

    1.错误叙述性说明    error loading undefined children.    TypeError:this._arrayOfTopLevelItems is undefied. ...

  10. Google调试技巧总结

    工欲善其事 工欲善其事,必先利器. Google调试面板一一介绍:F12回想一下大家都应该知道,哈哈 element面板 这个面板显示了页面所有html代码.用于调试css代码.右側展示左側相应选择元 ...