Poj 3233
来源:互联网 发布:java系统日志管理 编辑:程序博客网 时间:2024/05/19 12:36
题目
类似于等比数列求和,用二分.
一开始取余符号多用了几次,直接TLE了==
n%2==0: F[n]=F[n/2] (1+a[n/2]);
n%2==1: F[n]=F[n-1]+a[n];
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n,mod,k;struct Matrix{ int m[31][31];}E,Z;inline Matrix Mut(Matrix A,Matrix B){ Matrix ans; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { ans.m[i][j]=0; for(int k=0;k<n;k++) { ans.m[i][j]+=((A.m[i][k])*(B.m[k][j])); ans.m[i][j]%=mod; } } return ans;}inline Matrix Add(Matrix A,Matrix B){ Matrix ans; for(int i=0;i<n;i++) for(int j=0;j<n;j++) ans.m[i][j]=(A.m[i][j]+B.m[i][j])%mod; return ans;}inline Matrix Pow(Matrix A,int b){ Matrix t=A,ans=E; while(b) { if(b%2) ans=Mut(ans,t); b/=2; t=Mut(t,t); } return ans;}inline Matrix solve(Matrix A,int b){ if(b==0) return E; else if(b==1) return A; else if(b==2) return Add(A,Mut(A,A)); else if(b%2==1) return Add(Pow(A,b),solve(A,b-1)); else if(b%2==0) { Matrix ans=solve(A,b/2); Matrix C=Pow(A,b/2); Matrix B=Mut(ans,C); return Add(B,ans); }}int main(){ //freopen("in.txt","r",stdin); scanf("%d%d%d",&n,&k,&mod); { for(int i=0;i<n;i++) for(int j=0;j<n;j++) E.m[i][j]=(i==j); Matrix A; for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&A.m[i][j]),A.m[i][j]%=mod; Matrix ans=solve(A,k); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j!=0) printf(" "); printf("%d",ans.m[i][j]%mod); } printf("\n"); } } return 0;}
- poj 3233
- POJ 3233
- POJ 3233
- POJ 3233
- poj 3233
- Poj 3233
- POJ 3233
- poj 3233
- POJ 3233
- POJ 3233
- POJ 3233
- POJ 3233
- POJ 3233
- poj 3233 矩阵乘方
- poj 3233 矩阵
- POJ 3233 (矩阵)
- POJ
- poj
- ubuntu12.04 svn搭建 关联redmine
- c# 添加DLL 直接转到定义
- Deep Learning(深度学习)学习笔记整理系列之(二)
- Deep Learning(深度学习)学习笔记整理系列之(三)
- Silverlight 查询DataGrid 中匹配项 ,后台改变选中行颜色
- Poj 3233
- .NET开发必备网址
- Deep Learning(深度学习)学习笔记整理系列之(四)
- Deep Learning(深度学习)学习笔记整理系列之(五)
- cf ***
- mysql_安装到最后一步时,start_service + MySQL GUI Tools 使用简介
- Deep Learning(深度学习)学习笔记整理系列之(六)
- [leetcode刷题系列]3Sum
- hdu2087(KMP)