[BZOJ3240][Noi2013]矩阵游戏 快速幂
当我知道这题矩阵可以用费马小定理搞快速幂的时候 我眼泪都要落下来了QAQ
首先求一发通项F[1][1]->F[2][1]的通项
然后写成A+B的形式
若a != 1
A = (a^(m-1))*c
B = b*((a^(m-1))/(a-1)) * c + d
若a == 1
A = c
B = B * (m-1) * c + d
那么从F[1][1]->F[n][1]可以写作
F[n][1] = A^(n-1) + B * ( (A^(n-1) - 1) / (A-1))
然后再用F[n][1]推到F[n][m]就好啦
莫名其妙代码长好多QAQ
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#define SF scanf
#define PF printf
using namespace std;
typedef long long LL;
typedef long double LD;
inline int read() {int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }while('0' <= ch && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x*f;
}
const int MAXN = 1000000;
const int MOD = 1000000007;
char n[MAXN+10], m[MAXN+10];
int A, B, a, b, c, d, X, Y, XX;
int lenn, lenm;
int powa[MAXN+10], powA[MAXN+10];
inline int pow_mod(int x, int k) {int ret = 1;while(k) {if(k & 1) ret = 1LL * ret * x % MOD;x = 1LL * x * x % MOD;k >>= 1;}return ret;
}
inline int pow_mod(char *s, int len, int *t) {int ret = 1;for(int i = 0; i < len; i++) {int x = len-i-1;for(int p = 0; p < s[i]-'0'; p++)ret = 1LL * ret * t[x] % MOD;}return ret;
}
inline int inv(int x) {return pow_mod(x, MOD-2);
}
inline int getint(char *s, int len) {int ans = 0;for(int i = 0; i < len; i++)ans = (1LL * ans * 10 + s[i] - '0') % MOD;return ans;
}
void Doit() { int ans = 0;powA[0] = A;powA[1] = pow_mod(A, 10);for(int i = 2; i <= lenn; i++) powA[i] = pow_mod(powA[i-1], 10);X = 1LL * pow_mod(n, lenn, powA) * inv(A) % MOD;if(A != 1) ans = ((X + 1LL * B * (X-1) % MOD * inv(A-1) % MOD) % MOD + MOD) % MOD;else ans = ((1 + 1LL * B * (getint(n, lenn)-1)) % MOD + MOD) % MOD;if(a != 1) ans = ((1LL * ans * XX % MOD + 1LL * b * (XX-1) % MOD * inv(a-1) % MOD) % MOD + MOD) % MOD;else ans = ((ans + 1LL * b * (getint(m, lenm)-1) % MOD) + MOD) % MOD;PF("%d\n", ans);
}
int main() {SF("%s%s%d%d%d%d", n, m, &a, &b, &c, &d);lenn = strlen(n); lenm = strlen(m);powa[0] = a; powa[1] = pow_mod(a, 10);for(int i = 2; i <= lenm; i++) powa[i] = pow_mod(powa[i-1], 10);if(a != 1) {XX = 1LL * pow_mod(m, lenm, powa) * inv(a) % MOD;A = 1LL * XX * c % MOD;B = (1LL * b * (XX-1) % MOD * inv(a-1) % MOD * c % MOD + d) % MOD;Y = (XX + 1LL * b * (XX-1) % MOD * inv(a-1) % MOD) % MOD;}else {A = c % MOD;B = 1LL * b * (getint(m, lenm)-1) % MOD;Y = (B+1) % MOD;B = (1LL * B * c + d) % MOD;if(B < 0) B += MOD;}Doit();
}
/*
300000000001234560000000000000000000 400000002315654564897891231560000000000000000000000000 99999999 99999999 99999999 999999999
*/
[BZOJ3240][Noi2013]矩阵游戏 快速幂相关推荐
- BZOJ3240 NOI2013矩阵游戏(数论)
必修五题. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> ...
- (十进制快速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...
- BZOJ 3240 [Noi2013] 矩阵游戏 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24594825 [原题] 3240: [Noi2013]矩阵游戏 Time Limit ...
- P1397 [NOI2013] 矩阵游戏(矩阵乘法欧拉定理)
P1397 [NOI2013] 矩阵游戏(矩阵乘法&欧拉定理) #include<bits/stdc++.h> using namespace std; typedef long ...
- HDU 4565So Easy!2012长沙邀请赛A题(共轭构造+矩阵的快速幂)
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ...
- 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现
斐波那契数列 首先我们来定义一下斐波那契数列: f(n)={0n = 01n = 1f(n−1)+f(n−2)n > 1f(n)= \begin{cases} 0 & \text {n ...
- 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)
2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...
- [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats
矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...
最新文章
- Keras K.switch()用法
- 【刘文彬】区块链3.0:拥抱EOS
- Uipath 学习栏目基础教学:7、uipath 用open browser实现打开网页并登录
- 【牛客 - 181B】送分题(另类求解a+b,二分)
- jenkins 手动执行_Jenkins Git client插件命令执行漏洞(CVE201910392)
- 【转载】GuanDan v2.01 发布
- 运行wpf_在WPF中一种较好的绑定Enums数据方法
- AI PRO I 第4章 译文 Behavior Selection Algorithms An Overview
- 【2016年第4期】国务院批复建立促进大数据 发展部际联席会议制度
- Visual Studio Community2019 30天试用期过期,无法登录微软账户
- c盘满了怎么迁移软件到其他盘,c盘变红了文件怎么迁移
- 2020形式化方法复习笔记
- php错误测试,对 PHP 错误进行测试
- linux memwatch的内存检测-double-free
- 编程之美 - 中国象棋将帅问题
- android wifi布局,Android使用 WiFi 建立 P2P 连接
- CC2640R2F学习笔记(1)——搭建环境、编译烧写
- 设计c语言程序能否订火车票,C语言-购买火车票原理
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )...
- dw cc 2019如何为命令添加快捷键