[Noi2013]矩阵游戏
来自FallDream的博客,未经允许,请勿转载,谢谢。
婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式:
F[1][1]=1
F[i,j]=a*F[i][j-1]+b (j!=1)
F[i,1]=c*F[i-1][m]+d (i!=1)
递推式中a,b,c,d都是给定的常数。
现在婷婷想知道F[n][m]的值是多少,请你帮助她。由于最终结果可能很大,你只需要输出F[n][m]除以1,000,000,007的余数。
直接矩阵乘法貌似可以卡过 看评测机速度233
但是发现你只要记下ans=a*x+b 的a和b就行了 ,这样操作数量减少了一半,500ms左右就能过
讲讲正解 先考虑一行 假设m=4,x是首项,那么F[m]= a(a(a(x)+b)+b)+b 发现F[m]是一个等比数列加上一个 a^(m-1)*x .直接套用等比数列求和公式即可。
再考虑n,发现我可以把前面那个式子同样表示成Ax+B的形式,然后每次跳一行只是乘上C再加上D罢了,同样可以表示成等比数列 所以用同样的方法就可以解出答案
注意特判比为1的情况。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #define mod 1000000007
- #define getchar() (*S++)
- char BB[<<],*S=BB;
- using namespace std;
- inline int read()
- {
- int x = ; char ch = getchar();
- while(ch < '' || ch > '') ch = getchar();
- while(ch >= '' && ch <= '')x = (x<<)+(x<<) + ch - '',ch = getchar();
- return x;
- }
- char n[],m[];
- int a,b,c,d,A=,B=,C=,D=,len1=,len2=,ans=;
- int pow(int x,int k,int P)
- {
- int sum=;
- for(;k;k>>=,x=1LL*x*x%P)
- if(k&) sum=1LL*sum*x%P;
- return sum;
- }
- int main()
- {
- fread(BB,,<<,stdin);
- do n[++len1]=getchar(); while(n[len1]!=' ');--len1;
- do m[++len2]=getchar(); while(m[len2]!=' ');--len2;
- a=read();b=read();c=read();d=read();
- for(register int i=;i<=len2;++i)
- A=(1LL*A*+m[i]-'')%(mod-),
- B=(1LL*B*+m[i]-'')%mod;
- if(a==) A=,B=1LL*(B+mod-)*b%mod;
- else B=1LL*b*((pow(a,A+mod-,mod)+mod-)%mod)%mod*pow(a-,mod-,mod)%mod,A=pow(a,A+mod-,mod);
- ans=(1LL*A+B)%mod;
- for(register int i=;i<=len1;++i)
- C=(1LL*C*+n[i]-'')%(mod-),
- D=(1LL*D*+n[i]-'')%mod;
- c=1LL*A*c%mod,d=(1LL*A*d%mod+B)%mod;
- if(c==) ans=(ans+1LL*(D+mod-)*d%mod)%mod;
- else ans=(1LL*d%mod*((pow(c,C+mod-,mod)+mod-)%mod)%mod*pow(c-,mod-,mod)%mod+1LL*ans*pow(c,C+mod-,mod)%mod)%mod;
- printf("%d\n",ans);
- return ;
- }
[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 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...
- P1397 [NOI2013]矩阵游戏(递推)
P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ...
- 【bzoj3240】 Noi2013—矩阵游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3240 (题目链接) 题意$${F[1][1]=1}$$$${F[i][j]=a*F[i][j-1]+ ...
- BZOJ3240 [Noi2013]矩阵游戏
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 3240: [Noi2013]矩阵游戏
Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...
- NOI2013矩阵游戏
Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...
- 洛谷P1397 [NOI2013]矩阵游戏
矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...
随机推荐
- python的Virtualenv
Virtualenv 虚拟的 Python 环境(简称 venv) 是一个能帮助你在本地目录安装不同版本的 Python 模块的 Python 环境,你可以不再需要在你系统中安装所有东西就能开发并测试 ...
- nyoj 阶乘0
阶乘的0 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 计算n!的十进制表示最后有多少个0 输入 第一行输入一个整数N表示测试数据的组数(1<=N< ...
- python之路--day15---软件开发目录规范
软件开发目录规范 bin--启动文件 conf--配置文件 core--核心代码 db--数据文件 lib--常用功能代码 log--日志文件 readme--软件介绍
- 构建自己的 PHP 框架
这是一个系列的文章,项目地址在这里,欢迎大家star. 这个框架前一部分比较像Yii,后一部分比较像Laravel,因为当时正在看相应框架的源码,所以会有不少借鉴参考.捂脸- 这个框架千万不要直接应用 ...
- 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
解决问题:windows下:修改my.ini 在[mysqld]内加入secure_file_priv = linux下:修改my.cnf 在[mysqld]内加入secure_file_priv = ...
- 记一次oracle crs无法重启事故
今天在修改了数据库参数后,关闭数据库及crs,然后重新启动了服务器,服务器启动完成之后,发现数据库无法启动,过程如下: step1:重启数据库 $ su - grid $ srvctl stop da ...
- pygame事件之——控制物体(飞机)的移动
近来想用pygame做做游戏,在 xishui 大神的目光博客中学了学这东西,就上一段自己写的飞机大战的代码,主要是对键盘控制飞机的移动做了相关的优化 # -*- coding: utf-8 -*- ...
- python列表基础操作
Python列表基本操作 记住一句话,叫做顾首不顾尾 首先我们来定义一个列表 name = ["jixuege","dajiba","boduoye& ...
- Java-NIO(二):缓冲区(Buffer)的数据存取
缓冲区(Buffer): 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通 ...
- 闲聊 Exp/Imp 命令使用
1.Exp/Imp 命令可用的参数: 2.userid 参数必须跟在 Exp/Imp 命令的后面,可以省略,如 Exp Userid=用户名/密码@数据库实例名 或者 Exp 用户名/密码@数据库实例 ...