• 当时脑残了, 不会写矩阵快速幂中更改的系数, 其实把他扔到矩阵里同时递推就好了
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define ll long long
using namespace std;
ll read() {
ll nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
const int mod = 1000000006, mod1 = 1000000007;
void add(int &x, int y) {
x += y;
x -= x >= mod ? mod : 0;
}
int mul(int a, int b) {
return 1ll * a * b % mod;
} void add1(int &x, int y) {
x += y;
x -= x >= mod ? mod : 0;
} int mul1(int a, int b) {
return 1ll * a * b % mod1;
} struct Note {
int a[5][5], h, l;
Note() {
memset(a, 0, sizeof(a));
h = l = 0;
}
void init() {
memset(a, 0, sizeof(a));
h = l = 0;
}
} be, ed, tmp, biao; Note operator * (Note a, Note b) {
Note c;
c.h = a.h, c.l = b.l;
for(int i = 0; i < a.h; i++) {
for(int j = 0; j < a.l; j++) {
for(int k = 0; k < b.l; k++) {
add(c.a[i][k], mul(a.a[i][j], b.a[j][k]));
}
}
}
return c;
}
int poww(int a, int b) {
int ans = 1, tmp = a;
for(; b; b >>= 1, tmp = mul1(tmp, tmp)) if(b & 1) ans = mul1(ans, tmp);
return ans;
}
Note poww(ll x) {
tmp = biao;
for(; x; x >>= 1, tmp = tmp * tmp) if(x & 1) be = be * tmp;
return be;
} int f1, f2, f3, c, ans = 1;
ll n;
void init() {
be.init();
biao.init();
} int main() {
n = read();
n -= 3;
f1 = read(), f2 = read(), f3 = read(), c = read();
init();
be.h = 1, be.l = 3;
be.a[0][0] = 1;
biao.h = biao.l = 3;
biao.a[0][2] = biao.a[1][0] = biao.a[1][2] = biao.a[2][1] = biao.a[2][2] = 1;
ed = poww(n);
ans = mul1(ans, poww(f1, ed.a[0][2]));
init();
be.h = 1, be.l = 3;
be.a[0][1] = 1;
biao.h = biao.l = 3;
biao.a[0][2] = biao.a[1][0] = biao.a[1][2] = biao.a[2][1] = biao.a[2][2] = 1;
ed = poww(n);
ans = mul1(ans, poww(f2, ed.a[0][2]));
init();
be.h = 1, be.l = 3;
be.a[0][2] = 1;
biao.h = biao.l = 3;
biao.a[0][2] = biao.a[1][0] = biao.a[1][2] = biao.a[2][1] = biao.a[2][2] = 1;
ed = poww(n);
ans = mul1(ans, poww(f3, ed.a[0][2]));
init();
be.h = 1, be.l = 5;
be.a[0][3] = 8, be.a[0][4] = 1;
biao.h = biao.l = 5;
biao.a[4][4] = biao.a[1][0] = biao.a[0][2] = biao.a[1][2] = biao.a[2][1] = biao.a[2][2] = biao.a[3][2] = biao.a[3][3] = 1;
biao.a[4][2] = mod - 6;
biao.a[4][3] = 2;
ed = poww(n);
ans = mul1(ans, poww(c, ed.a[0][2]));
cout << ans << "\n";
return 0;
}

cf 1182 E - Product Oriented Recurrence的更多相关文章

  1. CF1182E Product Oriented Recurrence

    思路: fn = can * f1xn * f2yn * f3zn, 首先dp计算指数部分an = an-1 + an-2 + an-3 + 2 * n - 6, 而an-1 = an-2 + an- ...

  2. Product Oriented Recurrence(Codeforces Round #566 (Div. 2)E+矩阵快速幂+欧拉降幂)

    传送门 题目 \[ \begin{aligned} &f_n=c^{2*n-6}f_{n-1}f_{n-2}f_{n-3}&\\ \end{aligned} \] 思路 我们通过迭代发 ...

  3. codeforces 1182E Product Oriented Recurrence 矩阵快速幂

    题意:设f(n) = c ^ (2n - 6) * f(n - 1) * f(n - 2) * f(n - 3), 问第n项是多少? 思路:官方题解:我们先转化一下,令g(x) =  c ^ x * ...

  4. CodeForces 1182E Product Oriented Recurrence

    题意 给定五个整数 \(n,f_1,f_2,f_3,c\),其中数列 \(f\) 满足以下递推式: \[f_x=c^{2x-6}f_{x-1}f_{x-2}f_{x-3} \] 求 \(f_n\). ...

  5. CF 405C Unusual Product(想法题)

    题目链接: 传送门 Domino Effect time limit per test:1 second     memory limit per test:256 megabytes Descrip ...

  6. [CF 487C Prefix Product Sequence]

    题意 将1~n的正整数重排列,使得它的前缀积在模n下形成0~n-1的排列,构造解或说明无解.n≤1E5. 思考 小范围内搜索解,发现n=1,n=4和n为质数时有解. 不难发现,n一定会放在最后,否则会 ...

  7. Codeforces Round #566 (Div. 2)

    Codeforces Round #566 (Div. 2) A Filling Shapes 给定一个 \(3\times n\) 的网格,问使用 这样的占三个格子图形填充满整个网格的方案数 如果 ...

  8. Codeforces Round #566 (Div. 2)题解

    时间\(9.05\)好评 A Filling Shapes 宽度为\(3\),不能横向填 考虑纵向填,长度为\(2\)为一块,填法有两种 如果长度为奇数则显然无解,否则\(2^{n/2}\) B Pl ...

  9. 【已转移】【Java架构:基础技术】一篇文章搞掂:Spring

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文是对<SPRING实战第4版>的总结,大家也可以去仔细研读该书 [------------------------ ...

随机推荐

  1. keras和tensorflow搭建DNN、CNN、RNN手写数字识别

    MNIST手写数字集 MNIST是一个由美国由美国邮政系统开发的手写数字识别数据集.手写内容是0~9,一共有60000个图片样本,我们可以到MNIST官网免费下载,总共4个.gz后缀的压缩文件,该文件 ...

  2. 动手学深度学习14- pytorch Dropout 实现与原理

    方法 从零开始实现 定义模型参数 网络 评估函数 优化方法 定义损失函数 数据提取与训练评估 pytorch简洁实现 小结 针对深度学习中的过拟合问题,通常使用丢弃法(dropout),丢弃法有很多的 ...

  3. 【前端知识体系-JS相关】深入理解MVVM和VUE

    1. v-bind和v-model的区别? v-bind用来绑定数据和属性以及表达式,缩写为':' v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用 2. Vue 中三要素的是 ...

  4. ubuntu18.04.2下编译openjdk9源码

    最近在看<深入理解Java虚拟机 第二版>这本书,上面有关于自己编译OpenJDK源码的内容.自己根据书里的指示去操作,花了三天的时间,重装了好几次Ubuntu(还不知道快照这个功能,好傻 ...

  5. 启明星MRBS会议室预约系统V30.0发布

    MRBS系统官方网址 https://www.dotnetcms.org/ 在线演示 http://demo.dotnetcms.org/mrbs 用户名admin,密码123456 Meeting ...

  6. Disruptor系列(一)— disruptor介绍

    本文翻译自Disruptor在github上的wiki文章Introduction,原文可以看这里. 一.前言 作为程序猿大多数都有对技术的执着,想在这个方面有所提升.对于优秀的事物保持积极学习的心态 ...

  7. JSTL+EL表达式+JSP自定义框架案例

    不会框架不要紧,我带你自定义框架 前言:这标题说的有点大了,当一回标题党,之前在学JSP的时候提到了JSTL和EL表达式,由于一直钟情于Servlet,迟迟没有更新别的,这回算是跳出来了.这回放个大招 ...

  8. 【JS】---4用JS获取地址栏参数方法

    用JS获取地址栏参数方法 // 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new Reg ...

  9. PIE SDK水体指数法

    1.算法功能简介 单波段阈值法是通过选择某单一波段为判识参数,这一波段往往是水体特征最明显而其它地物相对不太突出的波段(如近红外波段和中红外波段),然后再划定阈值来确定水体信息.该方法主要是利用水体在 ...

  10. Java生鲜电商平台-系统报表设计与架构

    Java生鲜电商平台-系统报表设计与架构 说明:任何一个运行的平台都需要一个很清楚的报表来显示,那么作为Java开源生鲜电商平台而言,我们应该如何设计报表呢?或者说我们希望报表来看到什么数据呢?   ...