bzoj 3240 矩阵乘法+十进制快速幂
首先,构造出从f[][i]->f[][i+1]的转移矩阵a,和从f[i][m]->f[i+1][1]的转移矩阵b,
那么从f[1][1]转移到f[n][m]就是init*(a^(m-1)*b)^(n-1)*(a^(m-1))。
然后用用十进制快速幂(因为输入用的是10进制,这样就避免了高精度除法)。
第一次写十进制快速幂,大概的思想是维护当前位是1~9的要乘的矩阵,然后再通过这9个矩阵自己转移。
/**************************************************************
Problem: 3240
User: idy002
Language: C++
Result: Accepted
Time:5352 ms
Memory:2764 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#define N 1000010
#define Mod 1000000007
using namespace std; typedef long long dnt;
struct Matrix {
dnt v[][];
void make_unit() {
for( int i=; i<; i++ )
for( int j=; j<; j++ )
v[i][j] = (i==j);
}
inline const dnt* operator[]( int i ) const { return v[i]; }
Matrix(){}
Matrix( int aa, int ab, int ba, int bb ) {
v[][] = aa, v[][] = ab, v[][] = ba, v[][] = bb;
}
Matrix operator*( const Matrix &b ) const {
const Matrix &a = *this;
return Matrix( , (b[][]+a[][]*b[][])%Mod,
, a[][]*b[][]%Mod );
}
Matrix operator^( const char *b ) const {
Matrix rt, q[]; q[] = *this;
for( int i=; i<=; i++ )
q[i] = q[i-]*q[]; rt.make_unit();
for( int i=; b[i]; i++ ) {
if( b[i]-'' ) rt = rt*q[b[i]-''];
q[] = q[]*q[];
for( int j=; j<=; j++ )
q[j] = q[j-]*q[];
}
return rt;
}
}; char sn[N], sm[N];
int ln, lm;
int a, b, c, d;
Matrix ma, mb, ans; void subone( char s[] ) {
int i = ;
s[i]--;
while( s[i]<'' ) {
s[i] += ;
s[i+]--;
i++;
}
}
int main() {
scanf( "%s%s%d%d%d%d", sn, sm, &a, &b, &c, &d );
ln = strlen(sn), lm = strlen(sm);
reverse( sn, sn+ln );
reverse( sm, sm+lm );
subone(sn), subone(sm);
ma = Matrix(,b,,a)^sm;
mb = Matrix(,d,,c);
ans = ((ma*mb)^sn)*ma;
printf( "%lld\n", (ans[][]+ans[][]) % Mod );
}
bzoj 3240 矩阵乘法+十进制快速幂的更多相关文章
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...
- Luogu T7152 细胞(递推,矩阵乘法,快速幂)
Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...
- poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7825 Accepted: 3068 Descri ...
- HDU4965 Fast Matrix Calculation —— 矩阵乘法、快速幂
题目链接:https://vjudge.net/problem/HDU-4965 Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Othe ...
- BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...
- 【HDOJ5950】Recursive sequence(矩阵乘法,快速幂)
题意:f[1]=a,f[2]=b,f[i]=2f[i-2]+f[i-1]+i^4(i>=3),多组询问求f[n]对2147493647取模 N,a,b < 2^31 思路:重点在于i^4的 ...
- 2019牛客多校B generator 1——十进制快速幂
题目 已知 $x_i = ax_i + bx_{i-1}$,求 $x_n \% MOD$.($1\leq n\leq 10^{(10^6)}$) 分析 写成矩阵快速幂的形式,相当于求转移矩阵的 $n$ ...
- 十进制快速幂(牛客多校第五场)-- generator 1
思路: 十进制快速幂. #include <stdio.h>//sprintf #include <cstdlib>////malloc exit strcat itoa sy ...
随机推荐
- flask插件系列之flask_uploads上传文件
前言 flask可以实现上传文件和下载文件的基本功能,但如果想要健壮的功能,使用flask_uploads插件是十分方便的. 安装 pip install flask_uploads 基本使用 # e ...
- STM8CubeMx来了
几年前出来的STM32CubeMx是众多stm32开发者的福音,大大缩短了开发者的开发周期.就在前几天,st官网宣布针对stm8的图形配置工具stm8cube横空出世. 如果你还不知道STM32Cub ...
- 简单的搭mysql开发环境
所需软件 环境win8 64bit mysql5.7.16winx64.zip mysql-workbench-community-6.3.5-win32.zip 安装完了之后到mysql/bin下 ...
- Python 内置装饰器
内置的装饰器 内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象,所以更难理解一些. @property 在了解这个装饰器前,你需要知道在不使用装饰器怎么写一个属性. d ...
- IOS使用xcode编译代码
一.安装xcode 在app store中搜索xcode然后点击安装即可. 二.创建第一个app 1.启动xcode,单击Lauchpad 2.单击xcode启动 3.单击“Create a new ...
- Python 的內建模块
>>> import __builtin__>>> dir(__builtin__)['ArithmeticError', 'AssertionError', 'A ...
- node模拟socket
什么是Socket?网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket通信流程 基于net模块实现socket 服务端SocketServer.j ...
- Asp.net Vnext TagHelpers
概述 本文已经同步到<Asp.net Vnext 系列教程 >中] TagHelpers 是vnext中引入的新功能之一.TagHelper 的作用是类似于发挥在以前版本的 ASP.NET ...
- Redis(一)Redis简述
一 Redis 概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包 ...
- MongoDB入门教程一[文档与集合]
MongoDB 是面向集合存储的文档型数据库,其涉及到的基本概念与关系型数据库相比有所不同.举个例子,在关系型数据库中,我们记录一个订单的信息,通常是这样设计表结构的: 设计一个订单基本信息表和一个订 ...