poj 3734 <矩阵快速幂模版>
来源:互联网 发布:外汇业务数据监测中心 编辑:程序博客网 时间:2024/06/01 12:54
题意是给4种不同颜色的转头n个,问红、蓝2种颜色为偶数的种树有几种。
可以明显得知是递推,
设an为红绿为偶数的个数
bn为红绿之间只有一个为偶数的个数
cn为红绿均为奇数的个|数
那么得到递推式an=(an-1)*2+bn-1
bn=(bn-1)*2+(an-1)*2
cn=(an-1)*2+(bn1)*2+(cn-1)*2
那么可以得到这么个矩阵
an=|2 1 0|*|an-1|
bn=|2 2 0|*|bn-1|
cn=|2 2 2|*|cn-1|
然后注意如果an-1变成了1,这个矩阵的次方应该是n-1次。
但是对于这题是求an,那么可以乘n次后,这个矩阵变成an+1,其中的第一行第一列就代表an=(an+1)-1
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int MOD=1e4+7;struct ttt{ int map1[5][5];};int n;ttt mul(ttt &a,ttt &b){ //矩阵A*B ttt c; int i,j,k; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ c.map1[i][j]=0; for(k=1;k<=n;k++){ c.map1[i][j]+=a.map1[i][k]*b.map1[k][j]; c.map1[i][j]%=MOD; } } } return c;}ttt mul_self(ttt &a){ ttt b; int i,j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++){ b.map1[i][j]=0; for(k=1;k<=n;k++){ b.map1[i][j]+=a.map1[i][k]*a.map1[k][j]; b.map1[i][j]%=MOD; } } return b;}ttt pow1(ttt &a,int k){ ttt b; int i,j; memset(b.map1,0,sizeof(b.map1)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i==j) b.map1[i][j]=1; while(k){ //cout << "k=" <<k <<endl; if(k&1) b=mul(b,a); k=k>>1; a=mul_self(a); } return b;}int main(){ //freopen("in.txt","r",stdin); int i,j,k,l,f1,f2,f3,t1,t2,t3; int r,c,m; int a1,b1,c1; int T; cin >>T; while(T--){ cin >> m; ttt a; memset(a.map1,0,sizeof(a.map1)); n=3; a.map1[1][1]=2; a.map1[1][2]=1; a.map1[1][3]=0; a.map1[2][1]=2; a.map1[2][2]=2; a.map1[2][3]=2; a.map1[3][1]=0; a.map1[3][2]=1; a.map1[3][3]=2; a=pow1(a,m); /*for(i=1;i<=3;i++){ for(j=1;j<=3;j++) cout << a.map1[i][j] << " "; cout <<endl; }*/ cout << a.map1[1][1] << endl; } return 0;}
阅读全文
1 0
- poj 3734 <矩阵快速幂模版>
- 矩阵快速幂模版
- 模版--矩阵快速幂
- 矩阵快速幂模版
- 矩阵快速幂模版
- 矩阵快速幂 模版
- 矩阵快速幂模版
- 矩阵快速幂 poj 3734
- 模版—矩阵连乘快速幂
- NYOJ 148 矩阵快速幂模版
- HDU 1757 矩阵快速幂模版
- 51nod 矩阵快速幂模版题
- poj 3734 矩阵快速幂、母函数
- poj 3734 Blocks 【矩阵快速幂】
- poj 3734 矩阵快速幂模板清晰版
- POJ 3734 Blocks(矩阵快速幂)
- POJ 3734 Blocks(矩阵快速幂)
- 【POJ 3734 Blocks】+ 矩阵快速幂
- 为什么要使用微服务
- mysql查询表中前一条和后一条数据
- 改进版---字符串中数字子串的求和
- Pycharm内集成python3.6.1版本,安装scikit-learn模块方法
- ElasticSearch安装拼音插件 elasticsearch-analysis-pinyin
- poj 3734 <矩阵快速幂模版>
- 基于极限学习机ELM的人脸识别程序
- 【Netty入门】解决TCP粘包/分包的实例
- Maven插件声明顺序的微妙差别
- 跳棋的挑战,n皇后
- 从底层原理深入理解 PHP 的引用 “&”
- JS之数组元素排序方法sort
- Ubuntu Server 16.04 配置Keras
- okHttp各个module介绍