传送门

题目中那两个递推式显然可以写成矩乘的形式,然后十进制快速幂即可.这里不再赘述

只有两个递推式,我们可以考虑一波推式子,首先第一行的元素应该分别是\(1,a+b,a^2+ab+b,a^3+a^2b+ab+b...a^{m-1}+b\sum_{i=0}^{m-2}a^i\)

然后这样子推下去,第二行最后一个元素为\(a^{2(m-1)}c+a^{m-1}bc\sum_{i=0}^{m-2}a^i+a^{m-1}d+b\sum_{i=0}^{m-2}a^i\)

同理,第三行最后一个元素为\(a^{3(m-1)}c^2+a^{2(m-1)}bc^2\sum_{i=0}^{m-2}a^i+a^{2(m-1)}cd+a^{m-1}bc\sum_{i=0}^{m-2}a^i+a^{m-1}d+b\sum_{i=0}^{m-2}a^i\)

...

所以我们可以归纳得到\(f_{n,m}\)为$$a{n(m-1)}c{n-1}+a{m-1}d\sum_{i=0}{n-2}(a{m-1}c)i+b\sum_{i=0}{m-2}ai\sum_{j=0}{n-1}(a{m-1}c)^j$$

然后等比数列求和公式一套就完事了

注意\(a=1,c=1\)的情况

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define il inline using namespace std;
const int N=1e6+10,mod=1e9+7;
il int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
int inv(int a){return fpow(a,mod-2);}
int qh(int a,int n){return a==1?n:1ll*(1-fpow(a,n)+mod)*inv(1-a+mod)%mod;}
char cc[N],ss[N];
int l1,l2,n,m,nn,mm,a,b,c,d,pa,sa,sb,sc,ans,ac; int main()
{
scanf("%s%s",cc+1,ss+1);
l1=strlen(cc+1),l2=strlen(ss+1);
a=rd()%mod,b=rd()%mod,c=rd()%mod,d=rd()%mod;
for(int i=1;i<=l1;++i) n=(1ll*n*10+cc[i]-'0')%(mod-1),nn=(1ll*nn*10+cc[i]-'0')%mod;
for(int i=1;i<=l2;++i) m=(1ll*m*10+ss[i]-'0')%(mod-1),mm=(1ll*mm*10+ss[i]-'0')%mod;
pa=fpow(a,(m-1+mod-1)%(mod-1));
sa=a>1?qh(a,m-1):mm-1;
ac=1ll*pa*c%mod;
sb=ac>1?qh(ac,n-1):nn-1;
sc=ac>1?qh(ac,n):nn;
ans=1ll*fpow(c,(n-1+mod-1)%(mod-1))*fpow(pa,n)%mod;
if(n>1) ans=(ans+1ll*pa*sb%mod*d%mod)%mod;
ans=(ans+1ll*sc*sa%mod*b%mod)%mod;
printf("%d\n",ans);
return 0;
}

luogu P1397 [NOI2013]矩阵游戏的更多相关文章

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

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

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

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

  3. 洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)

    题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1      0 b列与列之间的矩阵为B = c 1      0 d最终答案为$A^{n - ...

  4. P1397 [NOI2013]矩阵游戏

    传送门 首先显然可以矩乘快速幂然后 $T$ 飞 看一眼题解发现因为这一题矩阵的特殊性所以可以对矩阵的次数欧拉降幂 然而我并不懂证明,所以我选择暴力乱搞的做法 十进制快速幂,然后注意一下常数,还有矩阵乘 ...

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

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

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

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

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

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

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

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

  9. 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...

随机推荐

  1. #424 Div2 Problem C Jury Marks (二分 && 暴力 && std::unique && 思维)

    题目链接 :http://codeforces.com/contest/831/problem/C 题意 :选手有一个初始积分,接下来有k个裁判为他加分或减分(时间顺序给出),然后告诉你n(1< ...

  2. 拨号操作——android.intent.action.CALL

    button_14.setOnClickListener(new View.OnClickListener() {          @Override     public void onClick ...

  3. Selenium 多窗口切换

    我们在操作网页的时候,点击有些页面的链接,会重新打开一个窗口,我们要在新页面上操作,就得切换窗口 比如在百度首页的登录框点击注册,会重新打开一个注册的新页面,要在新页面注册,就得先切进新页面 那我们怎 ...

  4. CSS 阴影应用

    1.背景阴影的使用 box-shadow:1px 1px 1px 1px #ccccccc inset; 说明:第一个参数为水平阴影的大小.第二个为垂直阴影的大小(值可以为负数).第三个参数是阴影模糊 ...

  5. Oracle使用正则表达式拆分字段里多行分布式值

    不规范的表设计往往会带来程序设计上的麻烦,也会降低SQL的性能. 例如下表显示的内容: 这样我们调取多值字段用来做匹配的话就比较麻烦,我们可以通过正则表达式REGEXP_SUBSTR先将 多值得列分成 ...

  6. spring-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. 使用Zabbix通过ILO管理口监控惠普服务器

    https://blog.csdn.net/qq_41571056/article/details/82928542

  8. mysql 全量备份以及增量备份

    MySQL 的全量备份很简单,增量备份虽然会手动使用但是还没写过脚本去实现增量备份.今天搞一搞,顺便回忆一下MySQL的基本操作.

  9. java Map类

    实现类 类型区别 HashMap 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允 ...

  10. Linux_Rsync远程同步备份服务器

    目录 目录 Remote Sync 同步的类型 本地模式 远程模式 RSync列表模式 RSync 服务模式 Setup RSync service How to use the rsync comm ...