luogu3263/bzoj4002 有意义的字符串 (数学+矩阵快速幂)
首先我们发现$\frac{b+\sqrt{d}}{2}$这个形式好像一元二次方程的求根公式啊(???反正我发现不了)
然后我们又想到虽然这个东西不好求但是$(\frac{b-\sqrt{d}}{2})^n$好像挺好求的啊(???反正我想不到)(由题目给的范围,这玩意在(-1,1))
于是把这个方程写出来:$x^2-b+\frac{b^2-d}{4}=0$,设它的两根是$x_1=\frac{b+\sqrt{d}}{2} , x_2=\frac{b-\sqrt{d}}{2}$
于是就是要求$\lfloor x_1^n+x_2^n-x_2^n \rfloor$
我们把$x_1^n+x_2^n$单拎出来,分解一下,得到$x_1^n+x_2^n = (x_1+x_2)(x_1^{n-1}+x_2^{n-1}) - x_1x_2(x_1^{n-2}+x_2^{n-2}) $
然后$x_1+x_2$和$x_1x_2$可以用韦达定理算,再把$x_1^i+x_2^i$设成f[i],就可以用矩阵快速幂优化了
可以发现它是个整数,最后讨论一下$x_2^n$就行了
(模数巨大,不光要用龟速乘,还要用unsigned long long)
#include<bits/stdc++.h>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pa;
const ull P=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} ull fmul(ull a,ull b){
ull re=;
while(b){
if(b&) re=(re+a)%P;
a=(a+a)%P,b>>=;
}return re;
} ull b,d,n; ull fpow(ull x){
ull f[];f[]=b,f[]=;
ull m[][],tmp[][];
m[][]=b,m[][]=,m[][]=(d-b*b)/,m[][]=;
while(x){
if(x&){
CLR(tmp,);
for(int i=;i<=;i++){
for(int j=;j<=;j++){
tmp[][i]=(tmp[][i]+fmul(f[j],m[j][i]))%P;
}
}
f[]=tmp[][],f[]=tmp[][];
}
CLR(tmp,);
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
tmp[i][j]=(tmp[i][j]+fmul(m[i][k],m[k][j]))%P;
}
}
}
memcpy(m,tmp,sizeof(m));
x>>=;
}return f[];
} int main(){
//freopen("","r",stdin);
int i,j,k;
b=rd(),d=rd(),n=rd();
if(n==) printf("1\n");
else{
ull ans=fpow(n-);
if(!(n&)&&d!=b*b) ans=(P+ans-)%P;
printf("%lld\n",ans);
} return ;
}
luogu3263/bzoj4002 有意义的字符串 (数学+矩阵快速幂)的更多相关文章
- $bzoj1009-HNOI2008$ $GT$考试 字符串$dp$ 矩阵快速幂
题面描述 阿申准备报名参加\(GT\)考试,准考证号为\(N\)位数\(x_1,x_2,...,x_n\ (0\leq x_i\leq 9)\),他不希望准考证号上出现不吉利的数字. 他的不吉利数字\ ...
- HDU 4565 So Easy!(数学+矩阵快速幂)(2013 ACM-ICPC长沙赛区全国邀请赛)
Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the cei ...
- HDU2604:Queuing(矩阵快速幂+递推)
传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...
- 【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)
[BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...
- BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法
BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...
- [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了 ...
- Luogu 3758 [TJOI2017]可乐(有向图邻接矩阵幂的意义 矩阵快速幂)
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...
- 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂
原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...
- BZOJ2326 HNOI2011数学作业(矩阵快速幂)
考虑暴力,那么有f(n)=(f(n-1)*10digit+n)%m.注意到每次转移是类似的,考虑矩阵快速幂.首先对于位数不同的数字分开处理,显然这只有log种.然后就得到了f(n)=a·f(n-1)+ ...
随机推荐
- 【学习总结】Markdown 使用的正确姿势
参考资料:Learning-Markdown 入门参考 注:原博可能对GitHub中的Markdown格式更适用. 有时间可以再GitHub中尝试并写一篇相关攻略. ps:在王熊猫的GitHub里也有 ...
- Java.lang.OutOfMemoryError:Metaspace
Understand the OutOfMemoryError Exceptionhttps://docs.oracle.com/javase/8/docs/technotes/guides/trou ...
- python 3.6.1 安装scrapy踩坑之旅
系统环境:win10 64位系统安装 python基础环境配置不做过多的介绍 window环境安装scrapy需要依赖pywin32,下载对应python版本的exe文件执行安装,下载的pywin32 ...
- C#复习笔记(3)--C#2:解决C#1的问题(结束C#2的内容:最后一些特性)
结束C#2的内容:最后一些新性 这是本章要讲的内容: 分部类型:可以在多个源文件中为 一个类型编写代码. 特别适用于部分代码是自动生成, 而其他部分的代码为手写的类型. 静态类:对工具类进行整理, 以 ...
- HashMap深度解析(转载)
原文地址:http://blog.csdn.net/ghsau/article/details/16890151 实现原理:用一个数组来存储元素,但是这个数组存储的不是基本数据类型.HashMap实现 ...
- mysql_linux(centos7 mysql 5.7.19)
centos7 mysql 5.7.19安装 1.解压文件 [root@centos3 ~]# tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.g ...
- Windows 下 Mysql8.0.12 的安装方法
1. 之前在windows 上面安装了 mysql 5.6 还有 mysql 5.7 遇到了几个坑 , 最近想直接安装最新版的 mysql 8.0.12(较新) 发现还是有坑 跟之前的版本不一样 这里 ...
- web项目中的监听器,过滤器以及自定义servlet的执行顺序
可以看到web容器一启动就会实例化监听器的contextInitialized(ServletContextEvent event)方法,然后是过滤器的init()方法,最后在用户访问web应用的 时 ...
- MyCat数据库中间件 - 分库
MyCat MyCat用于解耦分布式数据库与java,比如分库分表以后,需要查询某条数据时,需要java根据需要查的数据先计算去哪个库查,然而有了Mycat就不用自己计算怎么存储,怎么查询了.MyCa ...
- centos安装Tesseract
yum安装(推荐) yum search tesseract yum install tesseract.x86_64 -y pip3 install pytesseract pip3 install ...