hdu 6050 Funny Function 矩阵快速幂
2024-09-07 10:55:41
就算告诉我是矩阵快速幂我也推不出递推式呀!!!
官方题解:
对于任意i>=1,当j>=3时,有通过归纳法可以得到
进而推导出
后来自己重新推导了一遍
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; typedef long long ll;
const ll Mod=1e9+7;
const int msize=2;
const int N=4; struct Mat
{
ll mat[N][N];
}; Mat operator *(Mat a, Mat b)
{
Mat c;
memset(c.mat, 0, sizeof(c.mat));
for(int k = 0; k < msize; ++k)
for(int i = 0; i < msize; ++i)
if(a.mat[i][k])
for(int j = 0; j < msize; ++j)
if(b.mat[k][j])
c.mat[i][j] = (c.mat[i][j] +a.mat[i][k] * b.mat[k][j])%Mod;
return c;
} Mat operator ^(Mat a, ll k)
{
Mat c;
memset(c.mat,0,sizeof(c.mat));
for(int i = 0; i < msize; ++i)
c.mat[i][i]=1;
for(; k; k >>= 1)
{
if(k&1) c = c*a;
a = a*a;
}
return c;
} Mat operator -(Mat a,Mat b)
{
for(int i=0; i<msize; i++)
for(int j=0; j<msize; j++)
a.mat[i][j]=(a.mat[i][j]-b.mat[i][j])%Mod;
return a;
} int main()
{
// freopen("in.txt","r",stdin);
int t;
ll n,m;
Mat A,B1,B2;
A.mat[0][0]=1,A.mat[0][1]=2;
A.mat[1][0]=1,A.mat[1][1]=0;
B1.mat[0][0]=B1.mat[1][1]=1;
B1.mat[0][1]=B1.mat[1][0]=0;
B2.mat[0][0]=0,B2.mat[0][1]=2;
B2.mat[1][0]=1,B2.mat[1][1]=-1;
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d",&n,&m);
Mat ans;
if(n%2==0) ans=((A^n)-B1)^(m-1);
else ans=((A^n)-B2)^(m-1);
printf("%I64d\n",(ans.mat[1][0]+ans.mat[1][1])%Mod);
}
return 0;
}
最新文章
- webapi8
- 1-学习前言&;C语言概述
- Java内部DNS查询实现和参数设置
- 提取SD卡中的图片
- JS基础---->;js中ajax的使用
- html 表格中文字的背景色
- 为每个页面加上Session判断 转
- openvswitch安装、基本操作
- JDK中的Atomic包中的类及使用
- C语言面试题分类->;字符串处理
- for 循环,如果判断那里用到了一个函数,每次循环一次都会调用一次函数,如图
- npm ERR! File exists: /XXX/xxx npm ERR! Move it away, and try again.
- day24
- java -version显示版本和JAvA_HOME配置不一样
- springboot定时任务处理
- crontab 相关
- App架构师实践指南一之App基础语法
- nexus(Maven仓库私服)的安装、配置、使用和仓库迁移
- lombok 转载
- python3安装crypto出错,及解决方法
热门文章
- 使用find命令查找大文件
- 更换介质:请把标有Debian ... 的盘片插入驱动器
- OSI七层模型与TCP/IP五层模型-(转自钛白Logic)
- VMWare虚拟机显示模块“Disk”启动失败
- 【六】K8s-Pod 水平自动扩缩实践(简称HPA)
- Objective Evaluation Index of image
- 如何实现一个简易版的 Spring - 如何实现 AOP(下)
- Go语言协程并发---条件变量
- anaconda同时集成Python2 和 Python3
- 向Relay添加算子