来自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]矩阵游戏的更多相关文章

  1. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  2. BZOJ 3240: [Noi2013]矩阵游戏

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1586  Solved: 698[Submit][Status ...

  3. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  4. (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  M ...

  5. P1397 [NOI2013]矩阵游戏(递推)

    P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ...

  6. 【bzoj3240】 Noi2013—矩阵游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3240 (题目链接) 题意$${F[1][1]=1}$$$${F[i][j]=a*F[i][j-1]+ ...

  7. BZOJ3240 [Noi2013]矩阵游戏

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. 3240: [Noi2013]矩阵游戏

    Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...

  9. NOI2013矩阵游戏

    Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...

  10. 洛谷P1397 [NOI2013]矩阵游戏

    矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...

随机推荐

  1. iOS开发所有KeyboardType与图片对应展示

    1.UIKeyboardTypeAlphabet 2.UIKeyboardTypeASCIICapable 3.UIKeyboardTypeDecimalPad  4.UIKeyboardTypeDe ...

  2. css3动画 一行字鼠标触发 hover 从左到右颜色渐变

    偶然的机会发现的这个东东 这几天做公司的官网 老板突然说出了一个外国网站 我就顺手搜了 并没有发现他说的高科技 但是一个东西深深地吸引了我 就是我下面要说的动画  这个好像不能放视频 我就简单的描述一 ...

  3. pygame事件之——控制物体(飞机)的移动

    近来想用pygame做做游戏,在 xishui 大神的目光博客中学了学这东西,就上一段自己写的飞机大战的代码,主要是对键盘控制飞机的移动做了相关的优化 # -*- coding: utf-8 -*- ...

  4. Mego开发文档 - 保存关系数据

    保存关系数据 由于没有对象的更改跟踪,因此关系的操作需要开发者明确指定,在成功执行后Mego会影响到相应的关系属性中. 添加关系 在以下示例中如果成功执行则source的Customer属性会变为ta ...

  5. openssl几个加密算法使用介绍

    1.openssl简介 1)openssl概述 OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. ...

  6. python入门(14)定义函数和接收返回值

    定义函数: 定义一个求绝对值的my_abs函数为例: def my_abs(x): if x >= 0: return x else: return -x 如果没有return语句,函数执行完毕 ...

  7. requests-所有异常归类

    IOError RequestException HTTPError(RequestException) UnrewindableBodyError(RequestException) RetryEr ...

  8. Delphi X10.2 + FireDAC 使用 SQL 语句 UPDATE

    MainForm.Conn.StartTransaction; UserManagerQuery.SQL.Clear; UserManagerQuery.SQL.Text := 'UPDATE tab ...

  9. springboot--mybatis--pagehelper分页整合不起作用

    今天配置pagehelper,在pom文件中都使用的最新版本jar包,步骤都没问题,之后才发现是包的问题. 有问题:分页配置不起作用 <dependency> <groupId> ...

  10. MVC系列 引入MVC

    1.必须的类库 system.web.Mvc system.Web.Razor system.web.webPages system.web.webpages.razor 添加方式如下图 2.MVC项 ...