题意

题目链接

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. top查看CPU情况

    Linux查看CPU情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top ...

  2. UI线程中非安全操作与安全操作

    ------------------siwuxie095                             工程名:SwingUIThreadSafeTest 包名:com.siwuxie095 ...

  3. hdu1084

    #include<iostream> #include<algorithm> using namespace std; #define N 101 struct node { ...

  4. [亂數] <細說> C/C++ 亂數基本使用與常見問題

    陸陸續續寫了 EA  一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...

  5. 说一说solr在tomcat,jetty上的运行和安装优缺点

    本文是我从别的文章中组合而成的,结合自己实际操作进行了修改. Solr是什么 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lu ...

  6. Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战

    1 Redis 工作模型 redis实际上是个单线程工作模型,其拥有较多的数据结构,并支持丰富的数据操作,redis目前是原生支持cluster模式.如果需要缓存能够支持更复杂的结构和操作,基于以上原 ...

  7. winform中的Datagridview控件与List同步修改

    Winform的datagridview是个很强大的控件,可用datatable, List等型的数据与之绑定显示. 可惜的是,绑定的LIst不能同步更新. 估计是为了改进List不能同步更新的问题, ...

  8. Apple开发者账号更改公司名称

    对于大多数的开发者而言,可能很少遇见要修改账户的公司名称的问题,本来公司之前是这个名称,但是后来改名为另外的名称,这样的话在Apple开发者账号上的公司名称再用就不好了,所以就需要到Apple dev ...

  9. php路径问题

    ./ 是在当前目录开始寻找文件/ 是在下一级目录开始寻找文件 ../ 这个是在上一级目录开始寻找文件 $_SERVER['DOCUMENT_ROOT']获取站点根目录 __FILE__获取当前文件的完 ...

  10. 消息中间件 | 消息协议 | AMQP -- 《分布式 消息中间件实践》笔记

    04年,AMQP开放标准被开发 06年,AMQP规范被发布   基本概念     Message:与平台无相关的数据.     Publisher:向交换器发布消息的客户端应用程序     Excha ...