【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)

题面

BZOJ

洛谷

题解

发现我这种题总是做不动。。。

令\(A=\frac{b+\sqrt d}{2},B=\frac{b-\sqrt d}{2}\)。

发现\(A+B=b,AB=\frac{b^2-d}{4}\)。

要求的东西是\(A^n\),我们变成\(A^n+B^n-B^n\)。

分开考虑,发现\(A^n+B^n=(A^{n-1}+B^{n-1})(A+B)-(A^{n-2}+B^{n-2})AB\),这样子前面一半可以矩乘直接求。

后面一般根据数据范围,发现要么是\(0\),要么是\(-1\)。

那么直接特判一下就可以求了。

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
const ll MOD=7528443412579576937ll;
ll Multi(ll a,ll b){ll s=a*b-(ll)((long double)a/MOD*b+0.5)*MOD;return s<0?s+MOD:s;}
ll Plus(ll a,ll b){unsigned ll c=(0ull+a+b)%MOD;return c;}
ll b,d,n,ans;
struct Matrix
{
ll s[2][2];
void clear(){s[0][0]=s[0][1]=s[1][0]=s[1][1]=0;}
void init(){s[0][0]=s[1][1]=1;s[1][0]=s[0][1]=0;}
ll*operator[](int x){return s[x];}
}T;
Matrix operator*(Matrix a,Matrix b)
{
Matrix c;c.clear();
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
for(int k=0;k<2;++k)
c[i][j]=Plus(c[i][j],Multi(a[i][k],b[k][j]));
return c;
}
int main()
{
scanf("%lld%lld%lld",&b,&d,&n);
if(!n){puts("1");return 0;}
T[0][0]=0;T[0][1]=(d-b*b)/4;
T[1][0]=1;T[1][1]=b;
if(!(n&1)&&b*b<d)ans=MOD-1;
Matrix s;s.init();n-=1;
while(n){if(n&1)s=s*T;T=T*T;n>>=1;}
ans=Plus(ans,Plus(Multi(2,s[0][1]),Multi(b,s[1][1])));
printf("%lld\n",ans);
return 0;
}

【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)的更多相关文章

  1. luogu3263/bzoj4002 有意义的字符串 (数学+矩阵快速幂)

    首先我们发现$\frac{b+\sqrt{d}}{2}$这个形式好像一元二次方程的求根公式啊(???反正我发现不了) 然后我们又想到虽然这个东西不好求但是$(\frac{b-\sqrt{d}}{2}) ...

  2. 【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法

    题目描述 B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 输入 一行三个整数 b;d;n 输出 一行一个数表示模 7528443412579576937 ...

  3. BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法

    BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...

  4. HDU 2256 Problem of Precision 数论矩阵快速幂

    题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...

  5. $bzoj1009-HNOI2008$ $GT$考试 字符串$dp$ 矩阵快速幂

    题面描述 阿申准备报名参加\(GT\)考试,准考证号为\(N\)位数\(x_1,x_2,...,x_n\ (0\leq x_i\leq 9)\),他不希望准考证号上出现不吉利的数字. 他的不吉利数字\ ...

  6. [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]

    Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...

  7. bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4002 题解 神仙题. 根据下面的一个提示: \[ b^2 \leq d \leq (b+1)^ ...

  8. BZOJ4002 [JLOI2015]有意义的字符串

    据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...

  9. BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】

    题目链接 BZOJ4002 题解 容易想到\(\frac{b + \sqrt{d}}{2}\)是二次函数\(x^2 - bx + \frac{b^2 - d}{4} = 0\)的其中一根 那么就有 \ ...

  10. bzoj4002 [JLOI2015]有意义的字符串 快速幂

    Description B 君有两个好朋友,他们叫宁宁和冉冉. 有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 752844341 ...

随机推荐

  1. 【问题】VS问题集合,不用也要收藏防止以后使用找不到

    在日常的使用或者工作当中我们的vs会时不时的给我一些小“惊喜”.让我们有时候无可奈何.这不今天我又遇到了所以我决定记录下这些,方便以后再次出现好解决. 无法启动iis express web 服务器 ...

  2. Java 设置PDF文档背景色

    一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景色 设置图 ...

  3. 80后程序员降薪6K,预感中年危机来袭,准备跳槽却碰壁

    一提及程序员,很多人想到的都是“工资高”“技术好”诸如此类的,可见程序员是个非常赚钱的职业,所以每年都会有很多毕业生来选择这个行业. 但是社会是公平的,不要只看程序员表面上的光鲜亮丽,其背后也有很多的 ...

  4. 《JavaScript高级程序设计》笔记:HTML5脚本编程(16)

    跨文档消息传递 跨文档消息传递(cross-document messaging),有时候简称为XDM,指的是在来自不同域的页面间传递消息.例如,www.wrox.com域中的页面与位于一个内嵌框架中 ...

  5. C# CAD批量转换为图片

    最近写了个工具,将指定目录下的CAD文件批量转换为图片格式. 首先需要添加对应的引用 : 在AutoCAD2008的环境下对应AutoCAD 2008 Type Library 和 AutoCAD/O ...

  6. Android远程桌面助手(B1371)

    Android远程桌面助手(B1371),下载:https://files.cnblogs.com/files/we-hjb/ARDC%28B1371%29.7z 1.增加了对超大分辨率4320*21 ...

  7. git排除插件(.ignore)配置

    # Created by .ignore support plugin (hsz.mobi) ### Maven template target/ ### JetBrains template # C ...

  8. UOJ #449. 【集训队作业2018】喂鸽子

    UOJ #449. [集训队作业2018]喂鸽子 小Z是养鸽子的人.一天,小Z给鸽子们喂玉米吃.一共有n只鸽子,小Z每秒会等概率选择一只鸽子并给他一粒玉米.一只鸽子饱了当且仅当它吃了的玉米粒数量\(≥ ...

  9. MySql 触发器的新增、修改、删除的创建

    MySql 触发器与SQL server 触发器不同: SQL Server   使用 inserted.deleted 代表被触发的数据. MySQL NEW代表触发后的新数据行,Old代表当前触发 ...

  10. 六 Struts 拦截器、OGNL表达式

    一.OGNL表达式1.概念:是表达式语言,专门用来访问对象取值用的.2.对比EL表达式使用场景: A.EL主要用在web的jsp页面取值 B.OGNL适用以下环境 1.java程序中 2.在页面使用( ...