题意:求菲波那切数列的第n项。

分析:矩阵快速幂。

右边的矩阵为a0 ,a1,,,

然后求乘一次,就进一位,求第n项,就是矩阵的n次方后,再乘以b矩阵后的第一行的第一列。

#include <cstdio>
#include <cstring> using namespace std; typedef long long ll; const int maxn = ;
const int maxm = ; struct Matrix {
int n,m;
int a[maxn][maxm]; void clear() {
n = m = ;
memset(a,,sizeof(a));
} Matrix operator + (const Matrix &b) const {
Matrix tmp;
tmp.n = n;
tmp.m = m; for(int i=;i<n;++i)
for(int j=;j<m;++j)
tmp.a[i][j] = a[i][j] + b.a[i][j]; return tmp;
} Matrix operator - (const Matrix &b) const {
Matrix tmp;
tmp.n = n;
tmp.m = m; for(int i=;i<n;++i)
for(int j=;j<m;++j)
tmp.a[i][j] = a[i][j] - b.a[i][j]; return tmp;
} Matrix operator * (const Matrix & b) const {
Matrix tmp;
tmp.clear();
tmp.n = n;
tmp.m = b.m; for(int i=;i<n;++i)
for(int j=;j<b.m;++j)
for(int k=;k<m;++k)
tmp.a[i][j] +=(a[i][k]*b.a[k][j])%; return tmp;
} Matrix operator ^ (const int& k) const {
Matrix tmp,t = *this; int p = k;
tmp.clear(); tmp.m = tmp.n = this->n; for(int i=;i<n;++i)
tmp.a[i][i] = ; while(p) {
if(p&) tmp = tmp*t;
p>>=;
t = t*t;
}
return tmp;
}
}; int main(int argc, char const *argv[])
{
int n;
while(true) {
scanf("%d",&n);
if(n==-) break;
Matrix f;
f.clear();
f.n = f.m = ;
f.a[][] = ;
f.a[][] = ;
f.a[][] = ;
f.a[][] = ; f = f^n;
Matrix x;
x.clear();
x.n = ;
x.m = ;
x.a[][] = ;
x.a[][] = ;
f = f*x; printf("%d\n", f.a[][]); }
return ;
}

POJ 3070 矩阵快速幂的更多相关文章

  1. POJ 3070 矩阵快速幂解决fib问题

    矩阵快速幂:http://www.cnblogs.com/atmacmer/p/5184736.html 题目链接 #include<iostream> #include<cstdi ...

  2. 解题报告:poj 3070 - 矩阵快速幂简单应用

    2017-09-13 19:22:01 writer:pprp 题意很简单,就是通过矩阵快速幂进行运算,得到斐波那契数列靠后的位数 . 这是原理,实现部分就是矩阵的快速幂,也就是二分来做 矩阵快速幂可 ...

  3. poj 3070 矩阵快速幂模板

    题意:求fibonacci数列第n项 #include "iostream" #include "vector" #include "cstring& ...

  4. poj 3233 矩阵快速幂

    地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方  结果模m的相加和是多少 Given a n × n matrix A and a positive i ...

  5. poj 3734 矩阵快速幂+YY

    题目原意:N个方块排成一列,每个方块可涂成红.蓝.绿.黄.问红方块和绿方块都是偶数的方案的个数. sol:找规律列递推式+矩阵快速幂 设已经染完了i个方块将要染第i+1个方块. a[i]=1-i方块中 ...

  6. POJ 3233 矩阵快速幂&二分

    题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...

  7. poj 3744 矩阵快速幂+概率dp

    题目大意: 输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10).再输入p,代表这位童子兵非常好玩,走路一蹦一跳的.每次他在 i 位置有 p 的概率走一步到 i ...

  8. Blocks(POJ 3734 矩阵快速幂)

    Blocks Input The first line of the input contains an integer T(1≤T≤100), the number of test cases. E ...

  9. Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

    题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...

随机推荐

  1. 搭建基于Ubuntu的开发环境

    基于ubuntu 16.04 LTS经验 分区方案 内存:4G,硬盘:500G 分区 大小 说明 备注 / 20G 说明 swap 6G 说明 /tmp 15G 临时文件 /var 40G 可变数据目 ...

  2. 自定义django admin及其界面

    1.在项目目录下新创建一个app,命名为kingadmin,在templates目录下新建kingadmin目录,用来存放相关页面的模板文件,新建一个templatetags目录,用来存放处理前端模板 ...

  3. AtCoder Grand Contest 023 F - 01 on Tree

    Description 题面 Solution HNOI-day2-t2 复制上去,删点东西,即可 \(AC\) #include<bits/stdc++.h> using namespa ...

  4. 【一】JMeter的介绍安装和使用

    利用JMeter进行性能测试 一.JMeter介绍二.Jmeter安装三.工作原理四.脚本录制五.运行JMeter进行测试六.JMeter主要组件介绍七.参数化设置八.动态数据关联九.使用插件进行服务 ...

  5. Linux防火墙命令

    linux 查看防火墙状态   1.查看防火墙状态 systemctl status firewalld firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning ...

  6. Android - Rxjava 使用和原理

    用RxJava写的一个Android的小Demo 我所理解的RxJava——上手其实很简单 http://www.jianshu.com/p/5e93c9101dc5

  7. JavaSE环境Shiro的搭建及常用API

    通过shiroAPI来进行角色的管理 模拟用户是否登录: 模拟用户是否具有相应的权限:

  8. scss-!default默认变量

    在变量赋值之前, 利用!default为变量指定默认值. 也就是说,如果在此之前变量已经赋值,那就不使用默认值,如果没有赋值,则使用默认值. 代码实例如下: $content: "antzo ...

  9. jQuery Ajax(异步改同步)

    在实际使用中,我们经常会用的Ajax(异步加载,在不刷新整个网页的前提下对网页部分内容进行更新) 使用时,偶尔会遇上需要从一个接口中得到一个数组和数据对应的id,在另一个接口上再得到数据,最初写法如下 ...

  10. css sticky footer布局

    Sticky footers设计是最古老和最常见的效果之一,大多数人都曾经经历过.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块会被内容向下推送.套路为:内容 ...