洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)
题意
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]矩阵游戏(十进制矩阵快速幂)的更多相关文章
- 洛谷P1397 [NOI2013]矩阵游戏
矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...
- 洛谷 P1045 【麦森数】快速幂
不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...
- 洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增
正解:矩阵快速幂/tarjan+倍增 解题报告: 传送门! 跟着神仙做神仙题系列III 这题首先一看到就会想到快速幂趴?就会jio得,哦也不是很难哦 然而,看下数据范围,,,1×105,,,显然开不下 ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷P1274-魔术数字游戏
Problem 洛谷P1274-魔术数字游戏 Accept: 118 Submit: 243Time Limit: 1000 mSec Memory Limit : 128MB Probl ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...
随机推荐
- 2017Java学习路线图,内附完整Java自学视频教程+工具经验+面试
http://bbs.itheima.com/thread-338415-1-1.html
- storm定时器timer源码分析-timer.clj
storm定时器与java.util.Timer定时器比较相似.java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks:storm定时器也有一个线程负责调度所拥有的& ...
- Go语言学习记录之一(返回指针与返回值的区别)
先来一个返回指针的测试,结果跟想象一样 type A map[int]string type B struct { A c int } func main() { b := B{make(A), 10 ...
- 在 windows 下搭建 IDEA + Spark 连接 Hive 的环境
为了开发测试方便,想直接在 IDEA 里运行 Spark 程序,可以连接 Hive,需不是打好包后,放到集群上去运行.主要配置工作如下: 1. 把集群环境中的 hive-core.xml, hdfs- ...
- 对各种lca算法的理解
1.RMQ+ST 首先注意这个算法的要素:结点编号,dfs序,结点深度. 首先dfs,求出dfs序,同时求出每个结点的深度.然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换 ...
- iPhone摄影中的深度捕捉(WWDC2017-Session 507)
507是深度媒体相关的概念层面的内容.主要为下面4个部分: Depth and disparity on iPhone 7 Plus Streaming depth data from the cam ...
- 点分治【bzoj1468】 Tree
点分治[bzoj1468] Tree Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边 ...
- [Inside HotSpot] Epsilon GC
1. Epsilon GC简介 Epsilon GC源于RedHat开发者Aleksey Shipilëv提交的一份JEP 318: Epsilon: A No-Op Garbage Collecto ...
- android SDK manager 无法获取更新版本的解决办法
http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息: http://developer.android.c ...
- Silverlight Telerik 学习之主题的设置
Telerik控件版本:RadControls for Silverlight Q1 2013 当前的Telerik Silverlight 控件支持以下主题 Office Black - 这是默认主 ...