题目描述

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

    #!/bin/sh date i=0 while [ $i -le 30 ] do         echi $i /usr/sbin/r2/np_test_acl -f rule.txt i=$(e ...

  2. GitHub中webhooks的使用

    目录 GitHub中的webhooks的配置 对配置的webhooks的进行测试 目前在团队在设计一个应用管理的功能,需要了解到常用代码托管的Webhooks的使用.GitHub中的webhooks首 ...

  3. 180725-InfluxDB-v1.6.0安装和简单使用小结

    InfluxDB安装和简单使用小结 InfluxDB是一个时序性数据库,因为工作需求,安装后使用测试下是否支持大数据下的业务场景 说明: 安装最新版本 v1.6.0 集群版本要收费,单机版本免费 内部 ...

  4. 十几行代码带你用Python批量实现txt转xls,方便快捷

    前天看到后台有一兄弟发消息说目前自己有很多txt 文件,领导要转成xls文件,问用python怎么实现,我在后台简单回复了下,其实完成这个需求方法有很多,因为具体的txt格式不清楚,当然如果是有明确分 ...

  5. Python基础入门(迭代器和生成器)

    1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 ...

  6. 228. [LeetCode] Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...

  7. PHP 整数

    实验环境php 5.2.17,参考资料:PHP手册 1.整数溢出 如果整数超出最大范围或者运算结果超出最大范围,都会转变成float <?php $a=2147483647; var_dump( ...

  8. visual studio 2010 和 VSS(Visual SourceSafe)的连接使用

    visual studio 2010 和 VSS(Visual SourceSafe)的连接使用 1. 在visual vstudio中选择使用VSS插件: 2.       使用VSS进行源码管理: ...

  9. hadoop HA sshfen切换隔离时无法跳转ssh: bash: fuser: 未找到命令

    在zkfc的日志里面,有一个warn:PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8090 via ssh: bash: fuser: 未找到命令原因是 ...

  10. 只执行一次的js 函数。

    function runOnce(fn, context) { //控制让函数只触发一次 return function () { try { fn.apply(context || this, ar ...