终于看懂一道题QAQ然而NOI都是这种难度题怎么玩QAQ

原题:

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

1<=N,M<=10^1000 000,a<=a,b,c,d<=10^9

恩显然数论

数论嘛,直接推公式

然后就可以一步算出来f[n][1],然后再一步算出来f[n][m]即可

推推公式或许有奇迹hhh

(然而那个把f[i][1]推到f[i+1][1]的公式转化成C*(1-A^(x-1))/(1-A)+f[1][1]*A^(x-1)的形式似乎真的不好想出来QAQ

实现有许多细节,尤其是处理A是否等于1的时候容易写错

NOI都是这种难度的题怎么玩嘛QAQ

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. #define ll long long
  8. const int mo=(int)1e9+;
  9. int rd(){int z=,mk=; char ch=getchar();
  10. while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
  11. while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
  12. return z*mk;
  13. }
  14. char n[],m[];
  15. ll na=,nb=,ma=,mb=,a,b,c,d; ll C,A;
  16. ll qcp(ll x,ll y){
  17. ll z=,bs=x;
  18. while(y){ if(y&) z=(z*bs)%mo; bs=(bs*bs)%mo; y>>=;}
  19. return z;
  20. }
  21. ll x_1(ll x){ return qcp(x,mo-);}
  22. int main(){freopen("ddd.in","r",stdin);
  23. scanf("%s%s",n,m);
  24. int ln=strlen(n),lm=strlen(m);
  25. for(int i=;i<ln;++i) na=(na*+n[i]-'')%mo,nb=(nb*+n[i]-'')%(mo-);
  26. for(int i=;i<lm;++i) ma=(ma*+m[i]-'')%mo,mb=(mb*+m[i]-'')%(mo-);
  27. if(na==) na=mo; if(ma==) ma=mo; if(nb==) nb=mo-; if(mb==) mb=mo-;
  28. cin>>a>>b>>c>>d;
  29. if(a!=) C=(c*b%mo*(qcp(a,(mb-))-)%mo*x_1(a-)%mo+d)%mo,A=c*qcp(a,(mb-))%mo;
  30. else C=(c*b%mo*(ma-)%mo+d)%mo,A=c;
  31. ll tmp;
  32. if(A!=) tmp=(C*(qcp(A,(nb-))-)%mo*x_1(A-)%mo+qcp(A,(nb-)))%mo;
  33. else tmp=(C*(na-)%mo+)%mo;
  34. ll ans;
  35. if(a!=) ans=(b*(qcp(a,(mb-))-)%mo*x_1(a-)%mo+tmp*qcp(a,(mb-))%mo)%mo;
  36. else ans=((ma-)*b%mo+tmp)%mo;
  37. cout<<(ans%mo+mo)%mo<<endl;
  38. //cout<<C<<" "<<A<<" "<<tmp<<endl;
  39. return ;
  40. }

【BZOJ3240】【UOJ#124】【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. BZOJ3240 [Noi2013]矩阵游戏 矩阵 快速幂 卡常

    原文链接http://www.cnblogs.com/zhouzhendong/p/8084891.html 题目传送门 - BZOJ3240 题意概括 F[1][1]=1F[i,j]=a*F[i][ ...

  9. BZOJ3240 NOI2013矩阵游戏(数论)

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

  10. 题解【bzoj3240 [NOI2013]矩阵游戏】

    挖坑2333 等我把代码写完了再写

随机推荐

  1. Java中的 JDK下载和环境配置(方式一)

    第一步:需要安装JDK. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151 ...

  2. day6-if,while,for的快速掌握

    python的缩进和冒号 python之所以如此简单,归功于它的缩进机制,严格的缩进机制是的代码非常整齐规范,赏心悦目,提高了可读性,在一定意义上提高了可维护性,但对于从其他语音转过来的朋友如:jav ...

  3. CF712E [Memort and Casinos]

    题意 每次询问一段区间[l,r],求从最左边走到最右边(r+1)的概率(若走到l-1,则GG了),每个点上写有向右走的概率.支持单点修改. 思考 若只查询一次,那只要知道每个点在不走到l-1的情况下, ...

  4. fabric运维

    fabric中文文档:http://fabric-chs.readthedocs.io/zh_CN/chs/ 视频教程:http://study.163.com/course/courseMain.h ...

  5. c++的读入txt文件(转)

    因为学姐的项目需要,要用到excel的读入读出,百度过后发现txt的读入读出比较简单,于是,我采用了先把excel转成txt,然后再读入. 方法是csdn上的天使的原地址:   https://blo ...

  6. java基础入门系列1

    学java之前先了解下window系统的的一些常识: #常用windows快捷键 ctrl+x:剪切 ctrl+z:撤销 ctrl+A:全选 ctrl+V:黏贴 windows+d:回到桌面 Wind ...

  7. DevExpress WinForms使用教程:Data Grid - Find Panel模式

    [DevExpress WinForms v18.2下载] DevExpress WinForms用户都熟知,Data Grid是整个产品线的主要产品.在v18.2中添加了一些新的功能,例如之前教程中 ...

  8. redis 五大数据类型之list篇

    1.lpush/lpop/rpop/rpush/lrange  这里的list就是链表,lpush就是从左往右插入数据,rpush就是从右往左插数据,lrange就是从左往右范围性的取值,pop就是弹 ...

  9. Java语法基础学习DaySix

    一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...

  10. L245

    The State Council will lay down new rules that aim to make management compatible with internationall ...