【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}, ...
随机推荐
- 三年同行,质造未来,腾讯WeTest五大服务免费体验
WeTest 导读 2018年10月26日,腾讯WeTest将正式迎来三周岁生日.三周年庆典期间,只要在WeTest平台注册的用户,均可免费体验标准兼容.云真机.压测大师.手游安全扫描.应用安全扫描等 ...
- PLSQL集合类型
PLSQL集合类型 --联合数组(索引表) /* 用于存储某个数据类型的数据集合类型 .通过索引获得联合数组中得值 如下例子: */ DECLARE CURSOR cur_chars IS SEL ...
- web自动化测试框架总结
web自动化测试框架总结: https://www.processon.com/mindmap/5bdab924e4b0878bf41e9e09
- selenium(Java)WebDriverWait等待机制
//标题是不是“百度一下,你就知道” 18 new WebDriverWait(driver,5).until(ExpectedConditions.titleIs("百度一下,你就知道&q ...
- Zookeeper 分布式应用
简介 这篇文章是旨在为那些想要利用zookeeper协调服务能力进行分布式应用创建的开发者的入门指导,包括一些理论性和实践性的内容. 文章的前四部分系统的介绍了zookeeper的相关概念,对于理解z ...
- 【label】标签组件说明
label标签组件 用来改进表单组件的可用性,使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件.目前可以绑定的控件有:<button/>, <che ...
- lintcode 二叉树前序遍历
二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. / ...
- Android开发-API指南-<activity>
<activity> 英文原文:http://developer.android.com/guide/topics/manifest/activity-element.html 采集(更新 ...
- python3对接聊天机器人API
详情见http://api.qingyunke.com/智能机器人API接口说明支持功能:天气.翻译.藏头诗.笑话.歌词.计算.域名信息/备案/收录查询.IP查询.手机号码归属.人工智能聊天接口地址: ...
- 从零开始的Python学习Episode 6——字符串操作
字符串操作 一.输出重复字符串 print('smile'*6) #输出6个smile 二.通过引索输出部分字符串 print('smile'[1:]) print('smile'[1:3]) #输出 ...