题意

题目链接

Sol

感觉做这题只要对矩阵乘法理解的稍微一点就能做出来
对于每一行构造一个矩阵
A = a 1
      0 b
列与列之间的矩阵为
B = c 1
      0 d
最终答案为
$A^{n - 1}B A^{n - 1}B \dots $
把$A^{n-1}B$看成一项进行快速幂即可


maya把数据范围看漏了1e6个0。。。。。。。

好像把快速幂换成十进制快速幂就行了

/*
感觉做这题只要对矩阵乘法理解的稍微一点就能做出来
对于每一行构造一个矩阵
A = a 1
0 b
列与列之间的矩阵为
B = c 1
0 d
最终答案为
$A^{n - 1}B A^{n - 1}B$
把$A^{n-1}B$看成一项进行快速幂即可 maya把数据范围看漏了1e6个0。。。。。。。 好像把快速幂换成十进制快速幂就行了
*/
#include<bits/stdc++.h>
#define LL long long
#define int long long
const int MAXN = 1e6 + , mod = 1e9 + , L = ;
using namespace std;
char t1[MAXN], t2[MAXN];
int N[MAXN], M[MAXN], a, b, c, d, n, m;
int Mod(int x, int y) {
if(1ll * x * y > mod) return 1ll * x * y % mod;
else return 1ll * x * y;
}
int add(int x, int y) {
if(x + y > mod) return x + y - mod;
else return x + y;
}
struct Matrix {
int m[][];
Matrix() {
memset(m, , sizeof(m));
}
Matrix operator * (const Matrix &rhs) const {
Matrix ans;
/*for(int k = 1; k <= L; k++)
for(int i = 1; i <= L; i++)
for(int j = 1; j <= L; j++)
(ans.m[i][j] += 1ll * m[i][k] * rhs.m[k][j] % mod) %= mod;*/
ans.m[][] = add(Mod(m[][], rhs.m[][]), Mod(m[][], rhs.m[][]));
ans.m[][] = add(Mod(m[][], rhs.m[][]), Mod(m[][], rhs.m[][]));
ans.m[][] = add(Mod(m[][], rhs.m[][]), Mod(m[][], rhs.m[][]));
ans.m[][] = add(Mod(m[][], rhs.m[][]), Mod(m[][], rhs.m[][]));
return ans;
}
};
Matrix fp(Matrix a, int *p, int len) {
Matrix base;
for(int i = ; i <= ; i++) base.m[i][i] = ;
for(int i = len; i >= ; i--) {
for(int j = ; j <= p[i]; j++) base = base * a;
Matrix tmp = a;
a = a * a; a = a * a; a = a * a; a = a * tmp * tmp;
}
return base;
}
int trans(char *s, int l, int *to) {
for(int i = ; i <= l; i++) to[i] = s[i] - '';
to[l]--;
for(int i = l; i >= ; i--)
if(to[i] < ) to[i - ] += to[i], to[i] = + to[i];
else break;
return l;
}
main() {
// freopen("a.in", "r", stdin);
scanf("%s%s%d%d%d%d", t1 + , t2 + , &a, &b, &c, &d);
n = strlen(t1 + ); m = strlen(t2 + );
n = trans(t1, n, N); m = trans(t2, m, M); Matrix x, y;
x.m[][] = a; x.m[][] = b;
x.m[][] = ; x.m[][] = ;
y.m[][] = c; y.m[][] = d;
y.m[][] = ; y.m[][] = ; Matrix debug = fp(x, M, m) ;
debug = debug * y;
Matrix ans = fp(debug, N, n);
ans = ans * fp(x, M, m);
cout << (ans.m[][] + ans.m[][]) % mod;
}

洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)的更多相关文章

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

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

  2. 洛谷 P1045 【麦森数】快速幂

    不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...

  3. 洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增

    正解:矩阵快速幂/tarjan+倍增 解题报告: 传送门! 跟着神仙做神仙题系列III 这题首先一看到就会想到快速幂趴?就会jio得,哦也不是很难哦 然而,看下数据范围,,,1×105,,,显然开不下 ...

  4. 洛谷P1118 数字三角形游戏

    洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...

  5. 洛谷P1274-魔术数字游戏

    Problem 洛谷P1274-魔术数字游戏 Accept: 118    Submit: 243Time Limit: 1000 mSec    Memory Limit : 128MB Probl ...

  6. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  7. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  8. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

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

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

随机推荐

  1. Flask16 项目结构、flask_script插件

    1 项目结构 需求:易维护.可扩展 1.1 views 处理逻辑和路由映射 C 1.2 models 模型类 M 1.3 templates 模板文件 V 1.4 static 今天文件,如:js.c ...

  2. cocos2dx之tolua++全面分析(二):类注册

    tolua被作为库使用时,首先会做大量内部初始化工作: 一.tolua_open是入口点,它创建很多用于管理的内部变量,以下用_G指代全局表,_R指定registry table: 1._R.TOLU ...

  3. Sublime Text 3下安装Emmet的问题

    电脑装了Sublime Text 3,顺便安装了很多插件,今天编写前端HTML代码时,想用起前端常用的Emmet插件的功能,Emmet插件已经安装好了,奈何输入简写格式,按“CTRL+E”,没有反应. ...

  4. KINECT2通过ROS在线跑ORBSLAM2

    source ~/.bashrc export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/user/ORB_SLAM2/Examples/ROS 上面这个一 ...

  5. Net Core 下载图片

    直接上代码 string url = https://www.cnblogs.com/images/logo_small.gif; //获取网站当前根目录 string sWebRootFolder ...

  6. Collectd+InfluxDB+Grafana监控系统搭建

    环境配置 节点 配置 类型 操作系统 Sched 2G 2CPU 50GB ens3=>192.168.200.11 KVM虚拟机 CentOS 7 Nova 4G 2CPU 50GB ens3 ...

  7. BKReboot

    1: 重启第一台服务器(中控机),容易引起故障的组件有: appt.bkdata, 重启顺序: bkdata->appt. 2: 重启第二台服务器,容易引起故障的组件有:appo.saas-o, ...

  8. php5.6安装window7安装memcache.dll库所遇到的误区

    问题: window7 64位,下载的库 memcache.dll 为64位的,且对应php的版本.但是重启后phpstudy查看phpinfo依然没有memcache: 根源: 发现是下载的 mem ...

  9. oracle批量插入带主键自增

    https://blog.csdn.net/qq_37630354/article/details/82792288

  10. 在eclipse中打开文件所在的目录

    eclipse中默认是不能直接打开文件所在的目录的,需要在文件中右键-->properties-->location,复制到资源管理器中才能打开文件所在的目录.这种方法很麻烦.这里介绍一种 ...