传送门

首先显然可以矩乘快速幂然后 $T$ 飞

看一眼题解发现因为这一题矩阵的特殊性所以可以对矩阵的次数欧拉降幂

然而我并不懂证明,所以我选择暴力乱搞的做法

十进制快速幂,然后注意一下常数,还有矩阵乘的顺序,别反了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+,mo=1e9+;
char n[N],m[N];
struct Matrix {
int a[][];
Matrix () { memset(a,,sizeof(a)); }
inline Matrix operator * (const Matrix &tmp) const {
Matrix res;
res.a[][]=(1ll*a[][]*tmp.a[][]+1ll*a[][]*tmp.a[][])%mo;
res.a[][]=(1ll*a[][]*tmp.a[][]+1ll*a[][]*tmp.a[][])%mo;
res.a[][]=(1ll*a[][]*tmp.a[][]+1ll*a[][]*tmp.a[][])%mo;
res.a[][]=(1ll*a[][]*tmp.a[][]+1ll*a[][]*tmp.a[][])%mo;
//循环展开优化常数
return res;
}
}F,G,Ans;
Matrix ksm(Matrix x,char *y)//十进制快速幂
{
Matrix res,t; res.a[][]=res.a[][]=;
for(int i=strlen(y+);i;i--)
{
t=x;
if(y[i]=='') { t=t*t; t=t*t; t=t*t; t=t*x; res=res*t; }
else if(y[i]=='') { t=t*t; t=t*t; t=t*t; res=res*t; }
else for(int j=;j<=y[i]-'';j++) res=res*x;
t=x; x=x*x; x=x*x; x=x*x; x=x*t; x=x*t;
}
return res;
}
void Minus(char *s)//把数减一
{
for(int i=strlen(s+);i;i--)
if(s[i]=='') s[i]='';
else { s[i]=s[i]-; break; }
}
int main()
{
int a,b,c,d; scanf("%s",n+); scanf("%s",m+);
a=read(),b=read(),c=read(),d=read();
Ans.a[][]=Ans.a[][]=;
F.a[][]=a; F.a[][]=b; F.a[][]=;
G.a[][]=c; G.a[][]=d; G.a[][]=;
Minus(n); Minus(m);
F=ksm(F,m); G=F*G; G=ksm(G,n);
Ans=Ans*G*F;
printf("%d\n",Ans.a[][]);
return ;
}

P1397 [NOI2013]矩阵游戏的更多相关文章

  1. P1397 [NOI2013]矩阵游戏(递推)

    P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ...

  2. 洛谷P1397 [NOI2013]矩阵游戏

    矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...

  3. 洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)

    题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1      0 b列与列之间的矩阵为B = c 1      0 d最终答案为$A^{n - ...

  4. luogu P1397 [NOI2013]矩阵游戏

    传送门 题目中那两个递推式显然可以写成矩乘的形式,然后十进制快速幂即可.这里不再赘述 只有两个递推式,我们可以考虑一波推式子,首先第一行的元素应该分别是\(1,a+b,a^2+ab+b,a^3+a^2 ...

  5. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  6. BZOJ 3240: [Noi2013]矩阵游戏

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1586  Solved: 698[Submit][Status ...

  7. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  8. (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  M ...

  9. 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...

随机推荐

  1. BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...

  2. HDU 6089 Rikka with Terrorist (线段树)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6089 题解 这波强行维护搞得我很懵逼... 扫描线,只考虑每个点能走到左上方(不包括正上方,但包括正左 ...

  3. #pragma once vs #ifndef

    最后编辑: 2019-11-20 #pragma once 是一个非标准但被广泛支持的预处理符号, 其主要作用是防止文件重复引入问题. 在头文件中,可以定义 #pragma once 或者 #ifnd ...

  4. Unity3D_(物理引擎)Rigidbody组件

    Rigidbody组件刚体(Rigidbody)是Unity物理引擎中的重要组件,一个游戏对象添加了刚体组件以后就开始接受物理力学的影响了,比如重力.空气摩擦力.碰撞产生的推力   Learn 相同高 ...

  5. JS框架_(JQuery.js)高德地图api

    百度云盘 传送门 密码 :ko30 高德地图api效果 <!doctype html> <html> <head> <meta charset="u ...

  6. 「POI 2010」Bridges

    题目链接 戳我 \(Solution\) 看到"最大值最小",就知道应该要二分 二分之后,对于每个\(mid\),只要计算小于\(mid\)的边,然后在剩下的图中判断有无欧拉回路 ...

  7. Hibernate与MyBaits的区别?

    (1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...

  8. zoopkeeper 的ACL操作

    1.创建一个变量存放模式信息, private static final String MODE = "digest"; //ACL模式   2.在一个类的构造函数内放入初始化信息 ...

  9. Android属性动画完全解析

    转载:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始 ...

  10. 引用&指针交换函数实践

    实践如下: #include <iostream> using namespace std; // 普通交换,注意这里的ab值,在具体调用时是基本数据的拷贝,原始数据不会变化 // 因此这 ...