【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法
题意:
给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937)。
$n\leq 10^{18}$
$0<b^2\leq d<(b+1)^2\leq 10^{18}$
$b \mod 2=1$
$d \mod 4=1$
对于20%的数据有$b=1,d=5$
题解:
我是不知道这题跟字符串有什么关系。。。
场上有40%的数据是$n\leq 5$然而我们都没搞出来。。。
本质是发现性质然后乱搞。。。(这场数学竞赛的本质)
观察式子$(\frac{b+\sqrt{d}}{2})^n$,发现他是一个很像共轭根式的东西,那可以把另一半搞出来,得到
$(\frac{b+\sqrt{d}}{2})^n+(\frac{b-\sqrt{d}}{2})^n$;
显然这个东西一定是整数,不妨设个通项$a_n=(\frac{b+\sqrt{d}}{2})^n+(\frac{b-\sqrt{d}}{2})^n$,则答案就是$a_n-(\frac{b-\sqrt{d}}{2})^n$;
然后我们可以通过一些黑科技用通项把递推式还原出来:把两个共轭根式看成特征方程的两个解,再通过韦达定理就可以把原来的系数解出来。。。
有兴趣的同学可以自己算一下,这里算出来特征方程是$x^2-bx+\frac{b^2-d}{4}=0$,那么还原出来递推式就是
$a_n=b\times a_{n-1}+\frac{d-b^2}{4}\times a_{n-2}$,其中$a_0=2,a_1=b$
所以可以用矩阵快速乘来搞定数列,再考虑后面的$(\frac{b-\sqrt{d}}{2})^n$;
由于数据有$b^2\leq d<(b+1)^2$或$b=1,d=5$,所以$(\frac{b-\sqrt{d}}{2})^n∈(-1,0]$,当且仅当$d≠b^2$且$n$为偶数时要把答案减一。
时间复杂度$O(log^2n)$,但是原题模数爆longlong,所以要手写快速乘。。。
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define eps 1e-4
#define mod 999999999999999989ll
using namespace std;
typedef unsigned long long ull;
struct sq{
ull a[][];
sq(){
a[][]=a[][]=a[][]=a[][]=;
}
void init(){
a[][]=a[][]=;
}
}a,ans;
ull calc(ull x,ull y){
ull ret=;
for(;y;y>>=,x=(x+x>mod)?x+x-mod:x+x){
if(y&)ret=(ret+x>mod)?ret+x-mod:ret+x;
}
return ret;
}
sq operator *(const sq a,const sq b){
sq ret;
for(int i=;i<;i++)for(int j=;j<;j++)for(int k=;k<;k++){
ret.a[i][j]=(ret.a[i][j]+calc(a.a[i][k],b.a[k][j]))%mod;
}
return ret;
}
sq pw(sq x,ull y){
sq ret;
ret.init();
for(;y;y>>=,x=x*x){
if(y&)ret=ret*x;
}
return ret;
}
ull b,d,n;
int main(){
scanf("%llu %llu %llu",&b,&d,&n);
a.a[][]=;
a.a[][]=(d-b*b)/;
a.a[][]=b;
ans.a[][]=;
ans.a[][]=b;
ans=ans*pw(a,n);
if(n%==&&d!=b*b)ans.a[][]--;
printf("%llu",ans.a[][]);
return ;
}
【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法的更多相关文章
- [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]
Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...
- BZOJ 4002--有意义的字符串(矩阵乘法)
4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 963 Solved: 416[Submit][Sta ...
- BZOJ4002 [JLOI2015]有意义的字符串
据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...
- bzoj4002 [JLOI2015]有意义的字符串 快速幂
Description B 君有两个好朋友,他们叫宁宁和冉冉. 有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 752844341 ...
- bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4002 题解 神仙题. 根据下面的一个提示: \[ b^2 \leq d \leq (b+1)^ ...
- BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】
题目链接 BZOJ4002 题解 容易想到\(\frac{b + \sqrt{d}}{2}\)是二次函数\(x^2 - bx + \frac{b^2 - d}{4} = 0\)的其中一根 那么就有 \ ...
- BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法
BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...
- 【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)
[BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...
- 【BZOJ4002】[JLOI2015]有意义的字符串 数学
[BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...
随机推荐
- Html5必看:教你如何选择移动APP开发框架
如何选择移动APP开发框架一直是困扰很多新手的难题,今天杭州APP开发小编就和大家一起分享一下HTML5 移动app开发过程中框架该如何选择?当然我们得先从下面几个方面来评估一个框架的优越性,然后再做 ...
- Python中一些有用的小命令
1. 查看所有的关键字:help("keywords") 2.查看python所有的modules:help("modules") 3.单看python所有的m ...
- DOS下格式化移动硬盘
有的时候移动硬盘出现问题,在Win下没法操作,只能到dos下格式化.以下是用Win自带的diskpart完成格式化. 1 win + r -> cmd 进入dos 2 diskpart ...
- 使用短信猫读取短信java代码
短信猫简单配置:https://www.cnblogs.com/Big-Boss/p/9699880.html 测试发送短信代码:https://www.cnblogs.com/Big-Boss/p/ ...
- W3c盒子模型+IE盒子模型+box-sizing属性
1.盒子模型有两种,标准盒模型和IE盒模型,其中W3C标准的盒模型就是在网页的顶部加上 DOCTYPE 声明. (1)W3C标准的盒模型 W3C盒子模型包括4部分:margin,border,padd ...
- [JZOJ]100046【NOIP2017提高A组模拟7.14】收集卡片
Star 计划订购一本将要发行的周刊杂志,但他可不是为了读书,而是-- 集卡. 已知杂志将要发行 N 周(也就是 N 期),每期都会附赠一张卡片.Star 通 过种种途径,了解到 N 期杂志附赠的卡片 ...
- POI 详细介绍
Apache POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.目前POI已经有了Ruby版本. 结构: HSSF - 提供读写Microsoft Excel XLS格式 ...
- ASP.NET-AuthorizeAttribute做身份验证操作
代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...
- 【MFC设置静态文本框背景为透明】
视图类中加入OnCtlColor()函数: IDC_STATIC1为静态文本框ID HBRUSH CAngleView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT n ...
- 【iOS】UICollectionView自己定义Layout之蜂窝布局
网上的UICollectionView的Layout布局,其cell的形状多为矩形和圆形. 本篇博文将正六边形作为cell的基本形状,为您展现独特的蜂窝布局效果及实现源代码. 帮助您让自己的App脱颖 ...