codeforces 185a(矩阵快速幂)
2015-05-28 22:38
381 查看
题意:三角形变化过程如下图
问正着的三角形的个数,n=1时1个,n=2时3个,n=3时10 … 。
题解:可以找到规律
正x 倒y
1 0
3 1
10 6
… …
3*x+y 3*y+x
然后构造矩阵用矩阵快速幂求解。
问正着的三角形的个数,n=1时1个,n=2时3个,n=3时10 … 。
题解:可以找到规律
正x 倒y
1 0
3 1
10 6
… …
3*x+y 3*y+x
然后构造矩阵用矩阵快速幂求解。
#include <cstdio> #include <iostream> #include <cstring> using namespace std; const int MOD = 1000000007; const int N = 3; struct Mat { long long g ; }res, ori; long long n; Mat multiply(Mat x, Mat y) { Mat temp; memset(temp.g, 0, sizeof(temp.g)); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) for (int k = 0; k < 2; k++) temp.g[i][j] = (temp.g[i][j] + x.g[i][k] * y.g[k][j]) % MOD; return temp; } void calc(long long n) { while (n) { if (n & 1) ori = multiply(ori, res); n >>= 1; res = multiply(res, res); } } int main() { while (cin >> n) { memset(ori.g, 0, sizeof(ori.g)); ori.g[0][0] = 1; ori.g[0][1] = 0; res.g[0][0] = res.g[1][1] = 3; res.g[0][1] = res.g[1][0] = 1; calc(n); cout << ori.g[0][0] << endl; } return 0; }
相关文章推荐
- 清除浮动的几种方法
- Datagridview合并单元格
- iOS学习之--------------使用系统方法检测网络情况
- 剑指offer-找工作必看的书
- UltraEdit乱码无解,另辟蹊径
- ITOO3.0考评-项目组长有感
- hdu1151 Air Raid
- asp.net Identity2 角色(Role)的使用(二)角色管理,角色控制器和视图
- tomcat 安装与配置
- 15HD_OJ——The Last Practice
- Hadoop之——Partitioner编程
- 安卓真机抓包方法
- php5 non-thread-safe和thread-safe这两个版本有何区别?
- int变量在最新xcode出现的问题
- Java Servlet学习笔记(六)Servlet Cookies处理
- Google maps api demo
- 黑马程序员----7K面试题交通灯
- 机器人驾驶的神经网络愿景(下)
- C# WPF 实现英雄联盟图片 宝宝识图
- APache PDFbox API使用(3)----如何得到一个带表单的PDF文件的表单结构