P1397 [NOI2013]矩阵游戏
首先显然可以矩乘快速幂然后 $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]矩阵游戏的更多相关文章
- P1397 [NOI2013]矩阵游戏(递推)
P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ...
- 洛谷P1397 [NOI2013]矩阵游戏
矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...
- 洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)
题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1 0 b列与列之间的矩阵为B = c 1 0 d最终答案为$A^{n - ...
- luogu P1397 [NOI2013]矩阵游戏
传送门 题目中那两个递推式显然可以写成矩乘的形式,然后十进制快速幂即可.这里不再赘述 只有两个递推式,我们可以考虑一波推式子,首先第一行的元素应该分别是\(1,a+b,a^2+ab+b,a^3+a^2 ...
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- BZOJ 3240: [Noi2013]矩阵游戏
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1586 Solved: 698[Submit][Status ...
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ...
- (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...
- 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...
随机推荐
- 原生Js_制作简易日历
javascript制作简易日历,月份信息已经放在一个数组中,在<script>...</script>中编写代码实现其功能 实现步骤 a) 获取需要操作的dom对象 b) 在 ...
- JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...
- .py与.pyc文件区别
原来Python的程序中,是把原始程序代码放在.py文件里,而Python会在执行.py文件的时候.将.py形式的程序编译成中间式文件(byte-compiled)的.pyc文件,这么做的目的就是为了 ...
- C++入门经典-例3.5-判断某一年是否是闰年之嵌套判断
1:代码如下: // 3.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- 迷人的bug--torch.load
利用Google Colab跑了50代的EDSR超分神经网络,然后把网络模型下载到win10上做测试,结果,一直出错,卡了好久 结果百度到这一文章:Pytorch load深度模型时报错:Runtim ...
- 怎么理解一个规模大且结构复杂的c工程源码
很久以前,当要着手一个规模很大,结构复杂的c工程源码时,总是感觉无从下手.这个时候,一般google一下”XX源码分析“.当这个源码是很广泛使用的时,这样到也能得到不少启发:很不幸,经常要接触一些很少 ...
- SpringMvc@RequestParam 来映射请求参数
jsp页面 <a href="springmvc/testRequestParam?username=atguigu&age=11">Test RequestP ...
- Android WebView使用与JavaScript使用
WebView基本使用 WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?x ...
- SAEJ1757-1-2015(一)
SURFACE VEHICLE STANDARD 表面车辆标准 Standard Metrology for Vehicular Displays 车载显示 ...
- python - yeild
带有yield的函数不仅仅只用于for循环中,而且可用于某个函数的参数,只要这个函数的参数允许迭代参数.比如array.extend函数,它的原型是array.extend(iterable). 带有 ...