洛谷 P3263 [JLOI2015]有意义的字符串
首先,看到\((\frac{(b+\sqrt{d})}{2})^n\),很快能够想到一元二次方程的解\(\frac{-b\pm\sqrt{\Delta}}{2a}\)。
所以可以推出,\(\frac{(b+\sqrt{d})}{2}\)和\(\frac{(b-\sqrt{d})}{2}\)是\(x^2-bx+\frac{b^2-d}{4}\)的解。
方程移项得:\(x^2=b^2+\frac{d-b^2}{4}\)。
所以设\(f[i]=(\frac{b+\sqrt{d}}{2})^i+(\frac{b-\sqrt{d}}{2})^i\)。
数据范围已经提示b mod 2=1,d mod 4=1,所以f[i]肯定整数。
所以可以列出递推式:\(f[i]=bf[i-1]+\frac{d-b^2}{4}f[i-2]\)。
然后草稿纸上画一画可得:f[0]=2,,f[1]=b。
注意模数7528443412579576937巨大,乘的时候要用慢速乘或快速乘。
这时候我们考虑如何从f[n]推出ans。
由题易得:\(b^2<d<(b+1)^2\),所以有两种情况:
第1种:n为奇数。\(-1<(\frac{b-\sqrt{d}}{2})^n<0\)。
第2种:n为偶数。\(0\leq(\frac{b-\sqrt{d}}{2})^n<1\)。
所以当\(b^2!=d\),且n为偶数时,答案为f[n]-1,否则就是f[n]。
最后只要把上面递推式转化成矩阵,再快速幂就A了。
code:
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const ull m=7528443412579576937;
ull b,d,n,p,f[3]={0,2},t[3][3]={
{0,0,0},
{0,0,0},
{0,1,0}
};
ull ans;
ull suan(ull x,ull y)
{
ull d=0;
while (y) {
if (y&1) d=(d%m+x%m)%m;
x=(x%m+x%m)%m,y>>=1;
}
return d%m;
}
void fuyan()
{
ull d[3];
memcpy(d,f,sizeof(d));
memset(f,0,sizeof(f));
for (int i=1;i<=2;++i)
for (int j=1;j<=2;++j)
f[i]=(f[i]%m+suan(d[j]%m,t[j][i]%m))%m;
}
void yuzhouzhou()
{
ull d[3][3];
memcpy(d,t,sizeof(d));
memset(t,0,sizeof(t));
for (int i=1;i<=2;++i)
for (int j=1;j<=2;++j)
for (int k=1;k<=2;++k)
t[i][j]=(t[i][j]%m+suan(d[i][k]%m,d[k][j]%m))%m;
}
int main()
{
cin>>b>>d>>n;
p=n;
f[2]=b;
t[1][2]=(d-b*b)/4;
t[2][2]=b;
if (n==0) cout<<"1";
else {
--n;
while (n) {
if (n&1) fuyan();
yuzhouzhou();n>>=1;
}
ans=f[2];
if (b*b!=d&&p%2==0) --ans;
if (ans<0) ans+=m;
cout<<ans;
}
return 0;
}
洛谷 P3263 [JLOI2015]有意义的字符串的更多相关文章
- Luogu P3263 [JLOI2015]有意义的字符串
Link 设\(e=\frac{b+\sqrt d}2,i=\frac{b-\sqrt d}2\). 显然\(f_n=e^n+i^n\)是一个整数,且\(f_n=(e+i)f_{n-1}+eif_{n ...
- 【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 一行 ...
- 【BZOJ4002】[JLOI2015]有意义的字符串 数学
[BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...
- [JLOI2015]有意义的字符串
4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1000 Solved: 436[Submit][St ...
- 洛谷 P4036 [JSOI2008]火星人(splay+字符串hash)
题面 洛谷 题解 首先,我们知道求最长公共前缀可以用二分答案+hash来求 因为有修改操作, 考虑将整个字符串的hash值放入splay中 接着就是splay的基本操作了 Code #include& ...
- 洛谷 P1308 统计单词数【字符串+模拟】
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...
- 洛谷P3234 抄卡组 [HNOI2014] 字符串hash
正解:字符串hash 解题报告: 传送门! 字符串hash是字符串匹配中很常见的一个方法,原理也很好懂,这里就不做太多阐述辣有时间放到hash笔记里面去QAQ 题意不说了挺好理解的,自带一句话概括好评 ...
- 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]
题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...
随机推荐
- Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执
1.1.2 Large Class(过大的类) 特征:一个类包含过多的字段.方法.代码行. 问题原因: 类通常一开始很小,但是随着程序的增长而逐渐膨胀. 类似于过长方法,程序员通常觉得在一个现存类中添 ...
- spring配置,spring中的bean 的id不能相同
lib下加入包 spring.jar commons-logging.jar src下添加 applicationContext.xml <?xml version="1.0" ...
- linux如何手动释放linux内存
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...
- php中的正则表达式
一.定位字符 定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述. ^:表示匹配的模式出现在匹配对象的开头(和在"[]"里面不同) $: ...
- Git使用笔记2
工作必备: [更新master] git checkout master git pull git checkout zyb/FirstCommit git merge master //git re ...
- 利用python拼接图片
问题描述: 将16张图片拼接成4x4的图片, 且不改变每单张图片的像素值. 代码如下: import os from PIL import Image path = '/share1/home/con ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h> void main(void) { EA=1; //开放总中断 E ...
- 终端中管理SVN服务器 上传、下载、更新【原创】
从服务器下载项目, 下面的命令意思是 将服务器中mycode仓库的内容下载到/Users/apple/Documents/test目录中 我的电脑名叫做MacBook,记得将这个名字改成你们的电脑名字 ...
- DataUml Design 教程6-DataUML Design 1.1版本正式发布(支持PD数据模型)
从DataUML Design正式发布到现在有两个月了,由于最近比较忙,到现在才发布1.1版本.以后本人会一直坚持不断完善DataUML Design软件,希望广大程序猿们多多支持. 一.1.1版本新 ...
- IOS设计模式浅析之原型模式(Prototype)
原型模式的定义 “使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”.最初的定义出现于<设计模式>(Addison-Wesley,1994). 简单来理解就是根据这个原型创建 ...