【BZOJ3240】【NOI2013】矩阵游戏(数论)
【BZOJ3240】【NOI2013】矩阵游戏(数论)
题面
题解
搞什么矩阵十进制快速幂加卡常?
直接数学推导不好吗?
首先观察如何从每一行的第一个推到最后一个
\(f[i]=a·f[i-1]+b\)
利用数列的一系列知识
我们设\(f[i]+x=a(f[i-1]+x)\)
解出\(x=\frac{b}{a-1}\)
所以\(f[m]=a^{m-1}(f[1]+x)-x\)
也就是\(f[m]=a^{m-1}·f[1]+(a^{m-1}-1)x\)
再把它变到下一行去
\(f'[1]=c·f[m]+d\)
\(f'[1]=ca^{m-1}·f[1]+c(a^{m-1}-1)x+d\)
这样子,相当于\(A=ca^{m-1}\),\(B=c(a^{m-1}-1)x+d\)
这样子就是一个重新开始的上面推导的数列了
但是需要注意,当\(a\)和\(A\)为\(1\)的时候需要特殊判断一下
所以就是分类讨论一下就好了
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 1000100
#define MOD 1000000007
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m,A,B,C,D;
char N[MAX],M[MAX];
int get(char *c,int Mod)
{
int x=0;
for(int i=1,l=strlen(c+1);i<=l;++i)
x=(1ll*x*10+c[i]-48)%Mod;
return x;
}
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}
return s;
}
int n1,n2,m1,m2;
int main()
{
scanf("%s%s",N+1,M+1);
A=read();B=read();C=read();D=read();
int ans=1;
m2=get(M,MOD);m2=(m2+(MOD-1))%MOD;
m1=get(M,MOD-1);m1=(m1+(MOD-2))%(MOD-1);
n1=get(N,MOD-1);n2=get(N,MOD);
if(A!=1)
{
int x=1ll*B*fpow(A-1,MOD-2)%MOD;
B=(1ll*C*(fpow(A,m1)-1+MOD)%MOD*x%MOD+D)%MOD;
A=1ll*C*fpow(A,m1)%MOD;
if(A!=1)
{
int x=1ll*B*fpow(A-1,MOD-2)%MOD;
ans=(1ll*(1+x)*fpow(A,n1))%MOD;
ans=(ans+MOD-x)%MOD;
ans=(ans+MOD-D)*1ll*fpow(C,MOD-2)%MOD;
printf("%d\n",ans);
return 0;
}
else
{
ans=(ans+1ll*B*n1)%MOD;
ans=(ans+MOD-D)*1ll*fpow(C,MOD-2)%MOD;
printf("%d\n",ans);
return 0;
}
}
else
{
A=C;B=(1ll*m2*B%MOD*C%MOD+D)%MOD;
if(A!=1)
{
int x=1ll*B*fpow(A-1,MOD-2)%MOD;
ans=(1ll*(1+x)*fpow(A,n1))%MOD;
ans=(ans+MOD-x)%MOD;
ans=(ans+MOD-D)*1ll*fpow(C,MOD-2)%MOD;
printf("%d\n",ans);
return 0;
}
else
{
ans=(ans+1ll*B*n2)%MOD;
ans=(ans+MOD-D)*1ll*fpow(C,MOD-2)%MOD;
printf("%d\n",ans);
return 0;
}
}
printf("%d\n",ans);
return 0;
}
【BZOJ3240】【NOI2013】矩阵游戏(数论)的更多相关文章
- BZOJ3240 NOI2013矩阵游戏(数论)
必修五题. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> ...
- 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]矩阵游戏】
挖坑2333 等我把代码写完了再写
- bzoj3240 [Noi2013]矩阵游戏——费马小定理+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3240 n 和 m 太过巨大,不难想到应该用费马小定理什么的来缩小范围: 总之就是推式子啦,看 ...
- 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}, ...
随机推荐
- Rails导出CSV
版本 ruby 1.9 rails 3.2 完整代码 #引入CSV标准类库 require 'csv' class PeopleController < ApplicationControl ...
- 安卓app连接CC2541-手机休眠后唤醒,通信不再成功
1. 现在遇到的问题,手机进入休眠状态后唤醒,APP软件和CC2541的通信不正常了,但是CC2541依然检测到时连接状态.如何解决这个问题?手机唤醒之后会重新创建活动? 2.Wakelock 锁机制 ...
- MySQL高级-慢查询日志
一.慢查询日志是什么 1. 2. 3. 2.开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? 3.案例 1.查看当前多少秒算慢 2.设置慢的阙值时间 3.为什么设置后看不出变化? 4.记 ...
- APP产品设计流程图
产品设计流程(toB) 工作有半个月了,遇到了很多问题,也在不断学习和充实自己,让自己的工作变得更加清晰和流程化,所以整理了这么个设计流程. 收集整理一切有用或则以后可能会用的文档. 从文档里面提炼用 ...
- 网站端测试常见BUG
1.翻页 翻页时,没有加载数据为空,第二页数据没有请求 翻页时,重复请求第一页的数据 翻页时,没有图片的内容有时候会引用有图片的内容 2.图片数据为空 图片数据为空时,会保留为空的图片数据位置 3.链 ...
- 域名添加www之后(或域名后加端口)无法访问(阿里云服务器)
当时在阿里云服务器上部署了一个api接口,通过APP调用一直很正常,突然无法访问了,然后测试调查发现,只要在域名前加上www,再通过域名加端口的方式访问的话, 显示的都是 :502 错误:还一直以为是 ...
- 【C++模版之旅】项目中一次活用C++模板(traits)的经历 -新注解
问题与需求: 请读者先看这篇文章,[C++模版之旅]项目中一次活用C++模板(traits)的经历. 对于此篇文章提出的问题,我给出一个新的思路. talking is cheap,show me t ...
- TW实习日记:第16天
前端的样式bug实在是太太太莫名其妙了,尤其是封装好的组件,一层套一层的,根本不知道是哪一层出了问题...除了改bug就是做新功能,真想吐槽一下这个项目的留言板,根本没人会用吧...这功能实在是太老旧 ...
- 数数字 (Digit Counting,ACM/ICPC Dannang 2007 ,UVa1225)
题目描述:算法竞赛入门经典习题3-3 #include <stdio.h> #include <string.h> int main(int argc, char *argv[ ...
- Python3 Tkinter-PaneWindow
1.向PanedWindow中添加Pane from tkinter import * root=Tk() panes=PanedWindow(orient=VERTICAL) panes.pack( ...