题意

题目链接

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. 09_android项目的目录结构

    R.java是由IDE自动生成的,不允许修改. Android Dependences  安卓的支持库 项目创建之后一般都会把安卓支持库的V4包导入进来. 项目打包的时候assets的内容并不会被编译 ...

  2. Shrio00 Shiro角色授权、Shiro权限授权、开启Shiro缓存

    1 需求01 用户进行过认证登录后,某些接口是有权限限制的:如何实现只有相应权限的用户才可以调用相应接口 2 修改shiro配置类  ShiroConfiguration package cn.xia ...

  3. storm启动supervisor源码分析-supervisor.clj

    supervisor是storm集群重要组成部分,supervisor主要负责管理各个"工作节点".supervisor与zookeeper进行通信,通过zookeeper的&qu ...

  4. 某欧洲电信运营商OSS功能架构

  5. Java Script 学习笔记 -- Ajax

    AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...

  6. 微信小程序小结(2) ------ 自定义组件

    在小程序中有模板跟组件的概念.但模板更多的用于内容的展示,更复杂的交互逻辑就没办法了.所以在小程序中也定义了一些组件来解决一些简单逻辑的功能. 但有时预定义的组件并不能满足我们的需求,这时就需要我们自 ...

  7. 2014-11-3 NOIP模拟赛2

    NOIP 2014 水题模拟赛 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称 数列 刷漆 排队 英文题目与子目录名 seq paint layout 可执行文件名 seq paint l ...

  8. ImportError: /lib64/libc.so.6: version `GLIBC_2.17' 问题解决

    安装最新的TensorFlow(>=1.10)后,载入TensorFlow时提示Glibc版本过低,需要升级到指定版本. ImportError: /lib64/libc.so.6: versi ...

  9. 利用git reflog找回错误的重置

    在开发中经常需要reset分支,如果在reset前没有记住分支指向的提交ID,想要重置回原来的提交恐怕大多数开发者是重新拉取远程版本库,再rebase分支.但如果连不上远程版本库或没有远程版本怎么办呢 ...

  10. 把查询出来的结果进行修改再赋值给list

    List<RivBillNoPatternL> list = this.jdbcTemplate.getJdbcOperations().query(sqlSb.toString(), p ...