bzoj 3240: [Noi2013]矩阵游戏
2016-03-28 22:15
363 查看
题解戳这里
#include<bits/stdc++.h> using namespace std; const int maxn=1000005; typedef long long ll; const ll mod=1000000007; ll a,b,c,d,Ans; struct data{ll uni,ord;}n,m; char s[maxn],t[maxn]; void init(char* ss,data& k){ int l=strlen(ss); for(int i=0;i<l;++i){ k.uni=(k.uni*10+ss[i]-'0')%(mod-1); k.ord=(k.ord*10+ss[i]-'0')%mod; } } ll qpow(ll a,ll b){ll ans=1,aa=a;for(;b;b>>=1){if(b&1)ans=(ans*aa)%mod;aa=(aa*aa)%mod;}return ans;} ll ni(ll a){return qpow(a%mod,mod-2);} int main(){//freopen("in.in", "r", stdin); scanf("%s%s",s,t);scanf("%lld%lld%lld%lld",&a,&b,&c,&d); init(s,n);init(t,m); if(a==1){ a=c; b=((((c*b)%mod)*(m.ord-1))+d)%mod; if(a==1) Ans=(1+n.ord*b)%mod; else {ll tt=((qpow(a,n.uni)-1)*ni(a-1))%mod; Ans=(qpow(a,n.uni)+b*tt)%mod; } } else{ll tt=((qpow(a,m.uni-1)-1)*ni(a-1))%mod; b=((c*b%mod)*tt+d)%mod; a=(c*qpow(a,m.uni-1))%mod; if(a==1) Ans=(1+n.ord*b)%mod; else {ll tt=((qpow(a,n.uni)-1)*ni(a-1))%mod; Ans=(qpow(a,n.uni)+b*tt)%mod; } } printf("%lld",(((Ans-d)*ni(c))%mod+mod)%mod); }
相关文章推荐
- Bios工程师手边事—PCI资源分配
- maven仓库--私服(Nexus的配置使用)
- ThreadLocal(2)--ThreadLocal源码(jdk1.7)
- Java中四种引用详解(不同类型引用的JVM回收策略)
- mybatis(5)
- maven仓库--私服(Nexus的配置使用)
- maven仓库--私服(Nexus的配置使用)
- maven仓库--私服(Nexus的配置使用)
- CCF 模拟E DFS深搜
- JNI中如何打印Call Stack
- 欢迎使用CSDN-markdown编辑器
- Codeforces 650A 数学简单题
- poj--5651
- Game of Life
- CodeForces 3A Shortest path of the king(水题)
- IOS开发之录音与播放功能
- 326. Power of Three
- 第五周学习笔记
- 素材_动物叫声
- Hibernate框架的优缺点