http://acm.hdu.edu.cn/showproblem.php?pid=6470

题意

\(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n]

题解

  • 每一项只能由上一项经线性变换转移过来

代码

#include<bits/stdc++.h>
#define P 123456789
#define ll long long
using namespace std;
struct N{
ll a[10][10];
};
N mul(N x,N y){
N z;
memset(z.a,0,sizeof(z.a));
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
for(int k=0;k<6;k++){
z.a[i][j]+=(x.a[i][k]*y.a[k][j])%P;
z.a[i][j]%=P;
}
}
}
return z;
}
N pw(N y,ll x){
N z;memset(z.a,0,sizeof(z.a));
for(int i=0;i<6;i++)z.a[i][i]=1;
while(x){
if(x&1)z=mul(z,y);
y=mul(y,y);
x>>=1;
}
return z;
}
int T;
ll n,ans,a[]={2,1,8,4,2,1};
int b[][6]={{1,1,0,0,0,0},
{2,0,0,0,0,0},
{1,0,1,0,0,0},
{3,0,3,1,0,0},
{3,0,3,2,1,0},
{1,0,1,1,1,1}};
int main(){
cin>>T;
while(T--){
ans=0;
cin>>n;
if(n==1)printf("1\n");
else if(n==2)printf("2\n");
else{
N y;memset(y.a,0,sizeof(y.a));
y.a[0][0]=y.a[0][1]=1;
y.a[1][0]=2;
y.a[2][0]=y.a[2][2]=1;
y.a[3][0]=y.a[3][2]=3;y.a[3][3]=1;
y.a[4][0]=y.a[4][2]=3;y.a[4][3]=2;y.a[4][4]=1;
y.a[5][0]=y.a[5][2]=y.a[5][3]=y.a[5][4]=y.a[5][5]=1;
y=pw(y,n-2);
for(int i=0;i<6;i++){
ans+=a[i]*y.a[i][0]%P;
ans%=P;
}
printf("%lld\n",ans);
}
}
}

hdu6470 矩阵快速幂+构造矩阵的更多相关文章

  1. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  2. 51nod 1113 矩阵快速幂( 矩阵快速幂经典模板 )

    1113 矩阵快速幂 链接:传送门 思路:经典矩阵快速幂,模板题,经典矩阵快速幂模板. /******************************************************* ...

  3. Construct a Matrix (矩阵快速幂+构造)

    There is a set of matrixes that are constructed subject to the following constraints: 1. The matrix ...

  4. HDU 1588 矩阵快速幂 嵌套矩阵

    这个题目搞了我差不多一个下午,之前自己推出一个公式,即 f[n+k]=k*f[n]+f[n-1]结果发现根本不能用,无法降低复杂度. 后来又个博客的做法相当叼,就按他的做法来了 即 最终求得是 S(n ...

  5. LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton

    将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...

  6. 题解——洛谷P3390 【模板】矩阵快速幂(矩阵乘法)

    模板题 留个档 #include <cstdio> #include <algorithm> #include <cstring> #define int long ...

  7. hdu3483之二项式展开+矩阵快速幂

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  8. Educational Codeforces Round 60 D dp + 矩阵快速幂

    https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...

  9. hdu 1597(矩阵快速幂)

    1597: 薛XX后代的IQ Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 228  Solved: 55[Submit][Status][Web Bo ...

随机推荐

  1. python爬虫之爬取网站到数据库

    一.根据已有程序运行得到的结果 完整代码如下: import sqlite3; class DB(object): """数据库访问方法的实现""&q ...

  2. 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)

    题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...

  3. 设计模式-Proxy(结构型模式)

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Proxy.h #pragma once class Subject { public: virtual ~Subject ...

  4. WPF 精修篇 数据绑定到对象

    原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...

  5. Java内存中的常量池

    1,java内存模型简介 <深入理解java虚拟机>里将java内存分为如下五个模块: 堆-堆是所有线程共享的,主要用来存储对象. 其中,堆可分为:新生代和老年代两块区域.使用NewRat ...

  6. 【转】Ubuntu 16 安装 python 依赖出现 error: command 'i686-linux-gnu-gcc' failed with exit status 1

    问题 在 Ubuntu 下安装 python 依赖的时候出现以下错误 build/temp.linux-i686-3.5/_openssl.c:498:30: fatal error: openssl ...

  7. mysql 5.7 创建用户报错ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value

    如: INSERT INTO user (host, user, authentication_string, select_priv, insert_priv, update_priv) VALUE ...

  8. .net post请求wcf

    class Program { static void Main(string[] args) { }); var r = HttpHelper.PostRequest("http://lo ...

  9. SPA项目开发之首页导航+左侧菜单

    Mock.js: 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而mockjs就可以做到这一点 Mock.js是一个模拟数据的生成器,用来帮助前端调试开发.进行前后端的原型分离以及用 ...

  10. 初始HTML_表格

    Html表格 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...