题目描述

婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的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的余数。

输入输出格式

输入格式:

输入文件matrix.in包含一行有六个整数n,m,a,b,c,d。意义如题所述。

输出格式:

输出文件matrix.out包含一个整数,表示F[n][m]除以1,000,000,007的余数。

输入输出样例

输入样例#1:

3 4 1 3 2 6
输出样例#1:

85

说明

【样例1说明】

样例中的矩阵为:

1 4 7 10

26 29 32 35

76 79 82 85

数据范围

题解

我们从f[n][m]往前推导,最终可以推出:
x = a^(m - 1) * c
y = a^(m - 1) * d
p = b * (a^(m - 1) - 1) / (a - 1)
q = (x^(n - 1) - 1) / (x - 1)
则结果为
ans = x^(n - 1) * (a^(m - 1) + p) + (y + p) * q;

由于指数非常大,我们运用费马小定理a^(p - 1) ≡ 1 (mod p)
a^(m - 1) ≡ a^((m - 1) mod (p - 1)) (mod p)

还有p,q的实质与等比数列有关,若公比为1,要特判一下
然后就A了~~

通过这题加深了对费马小定理的理解

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 2000000000;
const LL P = 1000000007; void getread(LL& out,LL& out2){
char c = getchar();
out = out2 = 0;
LL mod = P - 1;
while (c < 48 || c > 57) c = getchar();
while (c >= 48 && c <= 57){
out = out * 10 + c - '0';
out2 = out2 * 10 + c - '0';
out %= mod;
out2 %= P;
c = getchar();
}
out = (out - 1 + mod) % mod;
out2 = (out2 - 1 + P) % P;
} inline LL qpow(LL a,LL b){
int ans = 1;
for (; b; b >>= 1,a = a * a %P)
if (b & 1)
ans = ans * a % P;
return ans;
} int main(){
LL n_1,m_1,n,m,a,b,c,d,p,q,x,y;
getread(n_1,n);
getread(m_1,m);
cin>>a>>b>>c>>d;
LL am_1 = qpow(a,m_1);
if (a == 1) p = b * m % P;
else p = b * (am_1 - 1) % P * qpow(a - 1,P - 2) % P;
x = am_1 * c % P;
y = am_1 * d % P;
if (x == 1) q = n;
else q = (qpow(x,n_1) - 1 + P) % P * qpow(x - 1,P - 2) % P;
LL ans = ((qpow(x,n_1) * ((am_1 + p) % P) % P + (y + p) % P * q % P) % P + P) % P;
cout<<ans<<endl;
return 0;
}



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矩阵游戏(数论)

    必修五题. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> ...

  7. 【bzoj3240】 Noi2013—矩阵游戏

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

  8. BZOJ3240 [Noi2013]矩阵游戏

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

  9. 3240: [Noi2013]矩阵游戏

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

随机推荐

  1. linux下,将一个目录中的图片文件合成为gif图片

    # {} 为文件所在目录位置 # {} 为gif图片位置 convert -delay -depth -layers optimize -quality -loop {} {}

  2. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...

  3. 类的扩展之 DataReader的扩展

    看了关于DataReader的扩展,发现能节省很多代码.从数据库读取数据最原始方法就是while()然后做循环,如果数据库添加一个字段那么你所有读取数据库的方法全部添加.通过扩展这个类就摆脱了这种令人 ...

  4. VR中射线点击按钮的实现

    VR中实现UI的Button点击,主要是需要实现IPointerClickHandler接口,因为在Unity将所有的按钮操作都封装成了相应的接口,需要相应的功能只需要去实现对应的接口就好了.在这里我 ...

  5. Spring Boot 整合JDBC 实现后端项目开发

    一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...

  6. 【Linux 运维】 date的使用

    date的使用 一.常用时间格式 #年.月.日 四位年大写,其余小写 [root@localhost ~]# date +%Y #长格式显示四位数年 [root@localhost ~]# date ...

  7. docker应用容器化准则—12 factor

    在云的时代,越来越多的传统应用需要迁移到云环境下,新应用也要求能适应云的架构设计和开发模式.而12-factor提供了一套标准的云原生应用开发的最佳原则. 在容器云项目中应用容器化主要参考12-Fac ...

  8. Matplotlib用法

    一 环境安装 Make sure you have installed numpy. 先安装np pip install matplotlib (Python2.X) pip3 install mat ...

  9. 在intelij IDEA中添加对jetBrick文件的识别

    在intelij IDEA中添加对jetBrick文件的识别 打开setting, 搜索File Types, 在Recognized File Types窗口找到Java Server Page或者 ...

  10. scrapy-redis+selenium+webdriver 部署到linux上

    背景:在使用selenium时,在本地使用windows,都会有一个图形界面,但是到了生产环境linux上没有了图形界面怎么部署呢? 解决方案: 1.安装图形化界面,不推荐,因为安装图形化界面会占用很 ...