• 当时脑残了, 不会写矩阵快速幂中更改的系数, 其实把他扔到矩阵里同时递推就好了
#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. JavaScript forEach() 方法

    JavaScript forEach() 方法  JavaScript Array 对象 实例 列出数组的每个元素: <button onclick="numbers.forEach( ...

  2. JQuery插件 aos.js-添加动画效果

    原文地址:http://www.mamicode.com/info-detail-1785357.html 简介: aos.js是一款效果超赞的页面滚动元素动画jQuery动画库插件.该动画库可以在页 ...

  3. mysql批量更新数据(性能优化) 第一种方式

    首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新N条数据.实践是检验真理的唯一标准,不一会儿,代码就敲完了,重新试了一下,效果依旧不理想.啊哦,真是要崩溃!后面又想到了利用异步,我一 ...

  4. 【UOJ#386】【UNR#3】鸽子固定器(贪心)

    [UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...

  5. angular获取时间

    获取24小时制的时间<h1> {{time}} </h1> <script> angular.module('app', []) .controller('ctrl ...

  6. Navicat for Mysql安装及破解教程

    一.Navicat for Mysql安装 下载链接:https://navicatformysql.en.softonic.com/ 点击download下载. 下载完成后双击安装 二.破解 破解工 ...

  7. 机器学习实战:基于Scikit-Learn和TensorFlow 第5章 支持向量机 学习笔记(硬间隔)

    数据挖掘作业,需要实现支持向量机进行分类,记录学习记录 环境:win10,Python 3.7.0 SVM的基本思想:在类别之间拟合可能的最宽的间距,也叫作最大间隔分类 书上提供的源代码绘制了两个图, ...

  8. IO流总结---- 字节流 ,字符流, 序列化 ,数据操作流,打印流 , Properties 集合

    笔记内容: 什么是流 字节流 字符流 序列化 数据操作流(操作基本数据类型的流)DataInputStream 打印流 Properties 集合 什么是流: 流是个抽象的概念,是对输入输出设备的抽象 ...

  9. JPA技术之EntityManager使用方法

    Session bean or MD bean对Entity bean的操作(包括所有的query, insert, update, delete操作)都是通过EntityManager实例来完成的. ...

  10. tkinter为多个窗口设置相同的icon报错

    import threading import tkinter from PIL import Image, ImageTk def show_window(): window = tkinter.T ...