2020牛客寒假算法基础集训营1 J. 缪斯的影响力 (矩阵快速幂/费马小定理降幂)
https://ac.nowcoder.com/acm/problem/200658
f(n) = f(n-1) * f(n-2) * ab ,f的第一项是x,第二项是y。
试着推出第三项是x·y·ab,第四项是x·y2·a2b,第五项是x2·y3·a4b,第六项是x3y5a7b
可以发现x的指数成1 0 1 1 2 3,y的指数0 1 1 2 3 5,a的指数是0 0 b 2b 4b 7b。
x和y的指数为斐波那契数列,a的指数规律为,除去系数b,其第n项前两项之和+1。
由于数据范围很大,所以可以用矩阵快速幂求出x y a的指数的第n项是多少。
x和y的乘法矩阵比较好构造
1 1
1 0
对于b的乘法矩阵,因为f(n)= f(n-1)+ f(n-2)+ 1
所以可以构造为:
1 1 1
1 0 0
0 0 1
因为最终是要求x·y·a的某次幂,且mod = 1e9+7是一个素数,所以这里再矩阵快速幂求解的过程中用费马小定理进行降幂操作
因为ap-1≡1%p,所以ab%p = ab%(p-1)%p,在矩阵快速幂计算过程中矩阵元素相乘对mod-1取模而不是mod
求出指数后,再用快速幂求解即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+;
struct Matrix {
ll a[][];
Matrix() { memset(a, , sizeof a); }
Matrix operator*(const Matrix &b) const {//重载矩阵乘法
Matrix res;
for (int i = ; i <= ; ++i)
for (int j = ; j <= ; ++j)
for (int k = ; k <= ; ++k)
res.a[i][j] = (res.a[i][j] + (a[i][k] * b.a[k][j] )%(mod-) ) % (mod-);
return res;
}
}base1,base2,B,X,Y; void init(){
base1.a[][] = base1.a[][] = base1.a[][] = ;
base2.a[][] = base2.a[][] = base2.a[][] = base2.a[][] = base2.a[][] = ;
B.a[][] = X.a[][] = Y.a[][] = ;
}
Matrix qpow(Matrix a,ll n) {
Matrix res;
res.a[][] = res.a[][] = res.a[][] = ;
while (n) {
if (n & ) res = res * a;
a = a * a;
n >>= ;
}
return res;
}
ll power(ll a,ll n){
ll res=;
a = a % mod;
while(n){
if(n&)res=res*a%mod;
n>>=;
a=a*a% mod;
}
return res;
} int main(){
ll n,x,y,a,b;
cin>>n>>x>>y>>a>>b;
if(n == ) {
cout<<x%mod;
return ;
}
if(n == ){
cout<<y%mod;
return ;
}
if(x%mod==||y%mod==||a%mod==){cout<<;return ;}
x%=mod,y%=mod;
init();
Matrix b1 = qpow(base1,n-);
Matrix b2 = qpow(base2,n-);
X = b1*X,Y = b1*Y,B = b2*B;
ll Cx = X.a[][],Cy = Y.a[][],Cb = B.a[][];
a = power(a%mod,b);
ll ans = ((power(x,Cx)*power(y,Cy)%mod)*power(a,Cb)%mod);
cout<<ans;
return ;
}
2020牛客寒假算法基础集训营1 J. 缪斯的影响力 (矩阵快速幂/费马小定理降幂)的更多相关文章
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- 2020牛客寒假算法基础集训营2 J.求函数 (线段树 推公式 单点修改 区间查询)
https://ac.nowcoder.com/acm/contest/3003/J 题解: #include<bits/stdc++.h> typedef long long ll; u ...
- 2020牛客寒假算法基础集训营4 J 二维跑步
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...
- 2020牛客寒假算法基础集训营4-F树上博弈
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...
- 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...
- 2020牛客寒假算法基础集训营1 F-maki和tree
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客寒假算法基础集训营5 J 炫酷数学
链接:https://ac.nowcoder.com/acm/contest/331/J来源:牛客网 小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个. 当然,直接做这个式 ...
- 2020牛客寒假算法基础集训营5 G街机争霸
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...
随机推荐
- LeetCode 57. Insert Interval 插入区间 (C++/Java)
题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...
- dotMemory 2019.3.1一直试用
创建一个bat脚本, 里面写上: reg delete HKEY_CURRENT_USER\Software\JetBrains\dotMemory /freg delete HKEY_CURRENT ...
- Play! 1.x 访问远程web
本文参考 Play Framework 控制层发起HTTP请求 (Send Http Request In Controller) 参考连接地址:http://blog.csdn.net/fhzait ...
- Linux的crontab 命令
crontab 命令 简介 从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行,即:crontab 是 Linux 系统中添加计划任务,定时执行一些必要的脚本所必不可少的工具 ...
- 剑指offer-面试题61-扑克牌中的顺子-数组
/* 题目: 从扑克牌中随机抽取n个数字,判断他们是否连续,扑克牌从A~K,大小王可代替任意数字. */ #include<iostream> #include<cstdlib> ...
- MySQL日志文件和InnoDB引擎文件简介
MySQL和InnoDB的关系不在这里介绍了.但是大家都知道其中相关的文件很多,类型很多.看文件名就有点分布清楚了.所以在这里简单介绍下他们的文件. 我们直接看文件列表以及在后面直接加注释.做笔记. ...
- 硬件知识整理part2--电阻在反馈网络中的应用
学而不厌,诲人不倦,不知老之将至.--孔子 电阻作为电路中基本的元器件之一.在电路设计中,我们有时会使用欧姆定律来大致估计一下电阻值的大小,但是大多时候我们是不用去过多考虑电阻值的大小,像我这样大方的 ...
- warning Attribute 'showExpand' must be hyphenated
报错翻译:警告属性“ showExpand”必须带连字符 报错原因父组件给子组件传参时,使用驼峰命名法,导致ESLint检测出语法问题,如下↓ 改成这样就ok了
- 关于iScroll在安卓移动端/chrome模拟移动端上下滑动卡顿问题处理!!!!真实可靠!!!已解决!!!
滑动卡顿效果 安卓手机打开微信浏览网页,Chrome模拟手机浏览网页,都出现的问题滑动卡顿! 修改代码点: 1. <style type="text/css"> ...
- 一次H5毛玻璃效果有感
印象中H5实现毛玻璃效果是挺好实现的,主要的代码就是css的filter:blur. 之前也用过几次,给背景图加高斯模糊啊,给一个div加高斯模糊啊.只要给需要添加高斯模糊的元素直接添加filter属 ...