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.牛牛和牛能进入了一个迷宫,这个迷宫 ...
随机推荐
- Lucene之分析器
什么是分析器? 分析(Analysis)在Lucene中指的是将域(Field)文本转换为最基本的索引表示单元—项(Term)的过程. 分析器(Analyzer)对分析操作进行了封装,通过执行一系列操 ...
- kuangbin专题 专题九 连通图 Warm up HDU - 4612
题目链接:https://vjudge.net/problem/HDU-4612 题目:一个大地图,给定若干个连通图,每个连通图中有若干个桥,你可以在任意某个连通图的 任意两个点添加一条边,问,添加一 ...
- window10 cmd 常见命令
AT 计划在计算机上运行的命令和程序. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. CACLS 显示或修改文件的访问控制列表(ACLs). CALL 从另一 ...
- 金融计算的开源库——QuantLib 学习入门
本文在Creative Commons协议下发布. 简介 瞬息万变的金融市场开发出了太多的金融产品,产生了太多的计算问题,这对于 Fintech 来讲:无论是计算能力上的,还是软件设计上的是一个巨大的 ...
- 我眼中的ASP.NET.MVC
MVC MVC全名 : Model View Controller ( Model-模型 View-视图 Controller-控制器)是一种经典的,经久不衰的,屹立不倒的软件设计框架.实现了业务逻 ...
- C++\CLI使用.net委托,*Callback注意"this"
今天在使用c++\cli的时候遇到了点关于委托,callback使用的问题,简单记录一下 首先贴段简单的C#中使用System.Threading.Timer的代码. Timer GameTim ...
- css3元素如何扭曲、移位或旋转
css3 transform 兼容性:IE10+ transform:rotate(deg) 正数为顺时针,负数为逆时针 <!DOCTYPE html> <html lang=&qu ...
- STL-queue 队列
#include <iostream> #include <queue> using namespace std; int main() { // queue也很简单 // p ...
- centos python虚拟环境安装
pip install virtualenv pip install virtualenvwrapper vim ~/.barshrc export VIRTUALENVWRAPPER_PYTHON= ...
- Mac常用命令行
Mac环境下启动tomcat 1.进入文件夹----------cd apache-tomcat-9.0.10/ cd bin 2.启动tomcat---------sudo sh startup.s ...