【BZOJ】3240: [Noi2013]矩阵游戏
题意
给出\(n, m(1 \le n, m \le 10^{1000000})\),求\(f(n, m) \ \mod \ 10^9+7\)
$$
\begin{cases}
f(1, 1) = 1 \\
f(i, 1) = cf(i-1, m) + d \\
f(i, j) = af(i, j-1) + b & (j \neq 1)
\end{cases}
$$
其中\(1 \le a, b, c, d \le 10^9\)
分析
对于递推式\(f_i = af_{i-1} + b\)
当\(a=1\)时通项为\(f_n = f_1 + (n-1) b\)
当\(a \neq 1\)时通项为\(f_n = a^{n-1} f_1 + \frac{b(a^{n-1} - 1)}{a-1}\)
那么根据上式可以求出对应的系数
\]
然后又得到
\]
就可以推出\(f(n, 1)\),最后再逆推回\(f(n, m)\)即可。
题解
快速幂部分,可以根据欧拉定理\(a^{\varphi(p)} \equiv 1 \pmod{p}, (a, p)=1\)可以知道\(a^{10^9+6} \equiv 1 \pmod{10^9+7}\)
所以我们可以在读入的时候就对\(n, m\)模\(10^9+6\)然后再快速幂。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=1e9+7;
int ipow(int a, int b) {
	if(a>=mo) {
		a%=mo;
	}
	int x=1;
	for(; b; b>>=1, a=(ll)a*a%mo) {
		if(b&1) {
			x=(ll)x*a%mo;
		}
	}
	return x;
}
void getint(int &n, int &nn) {
	char c=getchar();
	n=nn=0;
	for(; c<'0'||c>'9'; c=getchar());
	for(; c>='0'&&c<='9'; c=getchar()) {
		n=((ll)n*10+c-'0')%mo;
		nn=((ll)nn*10+c-'0')%(mo-1);
	}
}
int main() {
	int n, m, nn, mm, a, b, c, d, ans;
	getint(n, nn);
	getint(m, mm);
	scanf("%d%d%d%d", &a, &b, &c, &d);
	int k, j;
	if(a==1) {
		k=c;
		j=((ll)c*(m-1+mo)%mo*b%mo+d)%mo;
	}
	else {
		int p=ipow(a, mm-1+(mo-1));
		k=(ll)c*p%mo;
		j=((ll)b*c%mo*(1-p+mo)%mo*ipow(1-a+mo, mo-2)%mo+d)%mo;
	}
	if(k==1) {
		ans=((ll)n*j%mo+1)%mo;
	}
	else {
		int p=ipow(k, nn);
		ans=((ll)j*ipow(1-k+mo, mo-2)%mo*(1-p+mo)%mo+p)%mo;
	}
	ans=(ans-d+mo)%mo;
	ans=(ll)ans*ipow(c, mo-2)%mo;
	printf("%d\n", ans);
	return 0;
}【BZOJ】3240: [Noi2013]矩阵游戏的更多相关文章
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
		3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ... 
- BZOJ 3240: [Noi2013]矩阵游戏
		3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1586 Solved: 698[Submit][Status ... 
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
		3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ... 
- BZOJ 3240 [Noi2013]矩阵游戏 ——费马小定理 快速幂
		发现是一个快速幂,然而过不去. 怎么办呢? 1.十进制快速幂,可以用来练习卡时. 2.费马小定理,如果需要乘方的地方,可以先%(p-1)再计算,其他地方需要%p,所以需要保存两个数. 然后就是分类讨论 ... 
- (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
		题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ... 
- 3240: [Noi2013]矩阵游戏
		Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ... 
- P1397 [NOI2013]矩阵游戏(递推)
		P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ... 
- bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配
		1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1891 Solved: 919[Submit][Statu ... 
- BZOJ 1059 [ZJOI2007]矩阵游戏
		1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2707 Solved: 1322[Submit][Stat ... 
随机推荐
- VS对路径的访问被拒绝
			问题:权限问题. 1.检查自己电脑账户.是否是Administrator.如果没有启用.在[我的电脑]——[管理]——[本地用户和组]——[用户]——[Administrator]——[属性启用] 2 ... 
- Android Message Handling Mechanism
			转自:http://solarex.github.io/blog/2015/09/22/android-message-handling-mechanism/ Android is a message ... 
- 【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】
			一.ServletContextListener Method Summary void contextDestroyed(ServletContextEvent sce) R ... 
- vim配置方法
			/etc/vimrc (公共的) ~/.vimrc (私人的) rpm -qa|grep vim 这个命令,如何vim已经正确安装,则会显示上面三个包的名称 全部安装 yum -y install v ... 
- hdu 2891 中国剩余定理
			从6点看到10点,硬是没算出来,早知道玩游戏去了,艹,明天继续看 不爽,起来再看,终于算是弄懂了,以后超过一个小时的题不会再看了,不是题目看不懂,是水平不够 #include<cstdio> ... 
- [荐]js模版引擎handlebars.js
			[官方介绍:http://handlebarsjs.com/] Handlebars provides the power necessary to let you build semantic te ... 
- 【转】从RGB色转为灰度色算法
			----本文摘自作者ZYL910的博客 一.基础 对于彩色转灰度,有一个很著名的心理学公式: Gray = R*0.299 + G*0.587 + B*0.114 二.整数算法 而实际应用时,希望避 ... 
- windows OBJECT查找
			PspCidTable表里.索引值总之4的倍数.也就是说 PID/4 才是PspCidTable索引.*8 才是PsPCidTable+偏移.获取进程对应的 _HANDLE_TABLE_ENTRY 结 ... 
- EditText监听键盘输入
			第一步,先在布局中为EditText设置属性 <EditText android:singleLine="true" android:imeOptions="act ... 
- 【myEcplise2015   更换主题+字体颜色】
			更换myEcplise样式: 若对js文件或者java文件中的字体颜色不是很满意,可以去按照这个路径去更新字体颜色: 以javaScript文件为例子: 修改完成之后,javascript文件中文字是 ... 
