HDU 4686 矩阵链乘

发布时间:2021-09-19 09:49:48

#include
#include
#include

using namespace std;

const int mod=1000000007;

struct Matrix{
long long arr[5][5];
};

Matrix init,unit;
long long n,a0,ax,ay,b0,bx,by; //注意用long long,否则会溢出

Matrix Mul(Matrix a,Matrix b){
Matrix c;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++){
c.arr[i][j]=0;
for(int k=0;k<5;k++)
c.arr[i][j]=(c.arr[i][j]+a.arr[i][k]*b.arr[k][j]%mod)%mod;
c.arr[i][j]%=mod;
}
return c;
}

Matrix Pow(Matrix a,Matrix b,long long k){
while(k){
if(k&1){
b=Mul(b,a);
}
a=Mul(a,a);
k>>=1;
}
return b;
}

void Init(){
for(int i=0;i<5;i++)
for(int j=0;j<5;j++){
init.arr[i][j]=0;
unit.arr[i][j]=0;
}
unit.arr[0][0]=1, unit.arr[0][1]=a0%mod, unit.arr[0][2]=b0%mod, unit.arr[0][3]=a0*b0%mod,
unit.arr[0][4]=a0*b0%mod;

init.arr[0][0]=1, init.arr[0][1]=ay%mod, init.arr[0][2]=by%mod, init.arr[0][3]=ay*by%mod,
init.arr[0][4]=ay*by%mod, init.arr[1][1]=ax%mod, init.arr[1][3]=ax*by%mod, init.arr[1][4]=ax*by%mod,
init.arr[2][2]=bx%mod, init.arr[2][3]=ay*bx%mod, init.arr[2][4]=ay*bx%mod, init.arr[3][3]=ax*bx%mod,
init.arr[3][4]=ax*bx%mod, init.arr[4][4]=1;
}

int main(){

//freopen("input.txt","r",stdin);

while(cin>>n){
//scanf("%d%d%d%d%d%d",&a0,&ax,&ay,&b0,&bx,&by);
cin>>a0>>ax>>ay>>b0>>bx>>by;
if(n==0){
puts("0");
continue;
}
Init();
Matrix ans=Pow(init,unit,n-1);
cout< }
return 0;
}

题解见此

相关文档

  • java aop 实例_java Spring AOP详解及简单实例
  • 利用windows消息机制,截获特定应用程序里鼠标、键盘的消息事件
  • pandas apply 添加进度条
  • FAT文件系统简明教程
  • 暖宫贴有副作用吗暖宫贴天天贴有什么危害
  • 母爱,悄悄地
  • 发现一个好东东:木蚂蚁分享社区
  • 六年级写人 我敬佩的一个人
  • 如何快速提升车技
  • 职工困难户申请书
  • 送给老婆最温馨的经典话语
  • 常见查找和排序算法及java实现
  • 医用氧气有时效期吗如题谢谢了
  • 贵州师范大学学费一年多少钱
  • golang mysql 自动建表_Golang自动生成对应MySQL数据库表的struct定义-可视化-Go语言中文社区...
  • 老教师自我介绍
  • 珠宝销售年终工作总结2020年珠宝员工年终工作总结5篇范文
  • 室内设计大学生自荐信
  • 雪梨的营养价值及功效
  • 春风?蓝天?风筝
  • 施工横道图横线怎么画
  • 这个故事感动了我
  • 二本军校录取分数线
  • 数学建模教学优秀论文
  • 脸色不好?教你如何改善脸色
  • 孕妇可以吃新鲜莲子吗?孕妇吃新鲜莲子对胎儿好吗
  • Mac下使用Apache快速搭建文件上传服务器
  • 凯励程一年多少钱
  • I Can Only Imagine (Chris Brown amp; Lil Wayne)
  • 表白的话:我爱上了你
  • 猜你喜欢

    电脑版