• 当时脑残了, 不会写矩阵快速幂中更改的系数, 其实把他扔到矩阵里同时递推就好了
#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. nginx二级域名反向代理

    nginx二级域名反向代理 添加两个开发测试的域名 test.xxx.com :8088 testmobile.xxx.com: 8089 内网地址:127.0.0.1 外网地址:127.0.0.1 ...

  2. CAS单点登录之支持数据库认证

    本博客介绍一下基于CAS4.2.7的配置,之前博客CAS4.2.7服务端配置已经介绍了怎么部署CAS服务端,不过在登录机制是用固定的账号密码登录,实际项目肯定不可以这样做,所以本博客怎么配置CAS服务 ...

  3. Sitecore 8.2 渠道简介

    渠道是联系人通过广告系列或面对面与您的品牌互动时所使用的路径.联系人可以通过手机上的应用与您的品牌互动,点击社交网络上的广告访问您的网站,或访问实体店购买商品.使用Sitecore体验平台,您可以使用 ...

  4. 用maven对ssm进行整合

    网上有很多ssm整合的教程,这里给像我这样的初学的新手提供一个整合方法,同时也记录一下自己的学习进度. 同时推荐观看相关视频  https://www.bilibili.com/video/av536 ...

  5. PDO封装增删改查

    <?phpclass db{ public $table=null; public $pdo; public $where=null; //where 条件 public $field=null ...

  6. SpringBoot+Swagger整合

    0.引言及注意事项 Swagger是一个接口文档工具,依照Swagger可以0配置开发接口.不过要注意,Swagger是基于SpringBoot1.47版本开发的,而SpringBoot现在基本都是是 ...

  7. python3装饰器

    由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >> ...

  8. leetcode - 括号字符串是否有效

    括号字符串是否有效 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

  9. EM算法-完整推导

    前篇已经对EM过程,举了扔硬币和高斯分布等案例来直观认识了, 目标是参数估计, 分为 E-step 和 M-step, 不断循环, 直到收敛则求出了近似的估计参数, 不多说了, 本篇不说栗子, 直接来 ...

  10. Asp.net管道模型之(HttpModules 和 HttpHandler)

    上一节我们从大概范围介绍了管道模型的整体流程,我们从其中知道管道最重要的两大组件为:HttpModules 跟 HttpHandler.今天我们着重来介绍一下这两大组件 一:asp.net处理管道 从 ...