【BZOJ3240】【UOJ#124】【NOI2013】矩阵游戏
终于看懂一道题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
代码:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- using namespace std;
- #define ll long long
- const int mo=(int)1e9+;
- int rd(){int z=,mk=; char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
- while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
- return z*mk;
- }
- char n[],m[];
- ll na=,nb=,ma=,mb=,a,b,c,d; ll C,A;
- ll qcp(ll x,ll y){
- ll z=,bs=x;
- while(y){ if(y&) z=(z*bs)%mo; bs=(bs*bs)%mo; y>>=;}
- return z;
- }
- ll x_1(ll x){ return qcp(x,mo-);}
- int main(){freopen("ddd.in","r",stdin);
- scanf("%s%s",n,m);
- int ln=strlen(n),lm=strlen(m);
- for(int i=;i<ln;++i) na=(na*+n[i]-'')%mo,nb=(nb*+n[i]-'')%(mo-);
- for(int i=;i<lm;++i) ma=(ma*+m[i]-'')%mo,mb=(mb*+m[i]-'')%(mo-);
- if(na==) na=mo; if(ma==) ma=mo; if(nb==) nb=mo-; if(mb==) mb=mo-;
- cin>>a>>b>>c>>d;
- if(a!=) C=(c*b%mo*(qcp(a,(mb-))-)%mo*x_1(a-)%mo+d)%mo,A=c*qcp(a,(mb-))%mo;
- else C=(c*b%mo*(ma-)%mo+d)%mo,A=c;
- ll tmp;
- if(A!=) tmp=(C*(qcp(A,(nb-))-)%mo*x_1(A-)%mo+qcp(A,(nb-)))%mo;
- else tmp=(C*(na-)%mo+)%mo;
- ll ans;
- if(a!=) ans=(b*(qcp(a,(mb-))-)%mo*x_1(a-)%mo+tmp*qcp(a,(mb-))%mo)%mo;
- else ans=((ma-)*b%mo+tmp)%mo;
- cout<<(ans%mo+mo)%mo<<endl;
- //cout<<C<<" "<<A<<" "<<tmp<<endl;
- return ;
- }
【BZOJ3240】【UOJ#124】【NOI2013】矩阵游戏的更多相关文章
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- BZOJ 3240: [Noi2013]矩阵游戏
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1586 Solved: 698[Submit][Status ...
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ...
- (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...
- P1397 [NOI2013]矩阵游戏(递推)
P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1}, ...
- 【bzoj3240】 Noi2013—矩阵游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3240 (题目链接) 题意$${F[1][1]=1}$$$${F[i][j]=a*F[i][j-1]+ ...
- BZOJ3240 [Noi2013]矩阵游戏
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ3240 [Noi2013]矩阵游戏 矩阵 快速幂 卡常
原文链接http://www.cnblogs.com/zhouzhendong/p/8084891.html 题目传送门 - BZOJ3240 题意概括 F[1][1]=1F[i,j]=a*F[i][ ...
- BZOJ3240 NOI2013矩阵游戏(数论)
必修五题. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> ...
- 题解【bzoj3240 [NOI2013]矩阵游戏】
挖坑2333 等我把代码写完了再写
随机推荐
- Java中的 JDK下载和环境配置(方式一)
第一步:需要安装JDK. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151 ...
- day6-if,while,for的快速掌握
python的缩进和冒号 python之所以如此简单,归功于它的缩进机制,严格的缩进机制是的代码非常整齐规范,赏心悦目,提高了可读性,在一定意义上提高了可维护性,但对于从其他语音转过来的朋友如:jav ...
- CF712E [Memort and Casinos]
题意 每次询问一段区间[l,r],求从最左边走到最右边(r+1)的概率(若走到l-1,则GG了),每个点上写有向右走的概率.支持单点修改. 思考 若只查询一次,那只要知道每个点在不走到l-1的情况下, ...
- fabric运维
fabric中文文档:http://fabric-chs.readthedocs.io/zh_CN/chs/ 视频教程:http://study.163.com/course/courseMain.h ...
- c++的读入txt文件(转)
因为学姐的项目需要,要用到excel的读入读出,百度过后发现txt的读入读出比较简单,于是,我采用了先把excel转成txt,然后再读入. 方法是csdn上的天使的原地址: https://blo ...
- java基础入门系列1
学java之前先了解下window系统的的一些常识: #常用windows快捷键 ctrl+x:剪切 ctrl+z:撤销 ctrl+A:全选 ctrl+V:黏贴 windows+d:回到桌面 Wind ...
- DevExpress WinForms使用教程:Data Grid - Find Panel模式
[DevExpress WinForms v18.2下载] DevExpress WinForms用户都熟知,Data Grid是整个产品线的主要产品.在v18.2中添加了一些新的功能,例如之前教程中 ...
- redis 五大数据类型之list篇
1.lpush/lpop/rpop/rpush/lrange 这里的list就是链表,lpush就是从左往右插入数据,rpush就是从右往左插数据,lrange就是从左往右范围性的取值,pop就是弹 ...
- Java语法基础学习DaySix
一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...
- L245
The State Council will lay down new rules that aim to make management compatible with internationall ...