【BZOJ】【4002】【JLOI2015】有意义的字符串
构造线性递推式+矩阵乘法
题解戳PoPoQQQ
为了自己以后看的方便手打一遍好了>_>
求$( \frac{b+\sqrt{d}}{2} )^n$的整数部分对p取模后的值
其中$b\mod 2=1,d\mod 4=1,b^2 \leq d<(b+1)^2,n\leq10^{18}$
思路:
构造数列$a_n=b*a_{n-1}+\frac{d-b^2}{4}*a_{n-2}$
其中$a_0=2,a_1=b$
然后我们求出这个数列的通项公式,得到$a_n=(\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$
由于$b \mod 2=1, d \mod 4=1$,因此$\frac{d-b^2}{4}$一定是个正整数,故我们可以利用矩阵乘法来求出这个数列的第$n$项
然后对于$80\%$的数据$b^2\leq d <(b+1)^2$,对于$20\%$的数据$b=1,d=5$,因此$(\frac{b-\sqrt{d}}{2})^n \in (-1,0]$
故后面那一项对答案有贡献当且仅当 $d\not=b^2$且$n$为偶数
时间复杂度$O(log_2n)$
P.S.话说题目给的提示:题目名有意义的字符串“jxamfe”以及那个奇怪的模数我还是没明白提示在哪了……>_>我讨厌猜字谜QAQ
/**************************************************************
Problem: 4002
User: Tunix
Language: C++
Result: Accepted
Time:48 ms
Memory:1272 kb
****************************************************************/ //Huce #5 A
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef unsigned long long LL;
LL getll(){
LL v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=,INF=~0u>>;
const LL MOD=7528443412579576937LL;
/*******************tamplate********************/
LL b,d,n;
struct matrix{
LL d[][];
LL* operator [] (int x){ return d[x];}
matrix(int x=){
F(i,,) F(j,,)
if (i==j && i) d[i][j]=x;
else d[i][j]=;
}
}a;
inline LL mul(LL a,LL b){
LL r=;
for(;b;b>>=,a=(a+a)%MOD)
if (b&) r=(r+a)%MOD;
return r;
}
inline matrix operator * (matrix a,matrix b){
matrix c;
F(i,,) F(j,,) F(k,,) (c[i][j]+=mul(a[i][k],b[k][j]))%=MOD;
return c;
}
inline matrix Pow(matrix a,LL b){
matrix r();
for(;b;b>>=,a=a*a) if (b&) r=r*a;
return r;
}
int main(){
b=getll(); d=getll(); n=getll();
a[][]=; a[][]=(d-b*b)/;
a[][]=; a[][]=b;
a=Pow(a,n);
cout<<((a[][]*%MOD+mul(b,a[][])-(d!=b*b&&!(n&)))%MOD+MOD)%MOD<<endl;
return ;
}
4002: [JLOI2015]有意义的字符串
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 54 Solved: 28
[Submit][Status][Discuss]
Description
B 君有两个好朋友,他们叫宁宁和冉冉。
Input
一行三个整数 b;d;n
Output
一行一个数表示模 7528443412579576937 之后的结果。
Sample Input
Sample Output
HINT
0 <b^2 < d< (b +1)2 < 10^18。
Source
【BZOJ】【4002】【JLOI2015】有意义的字符串的更多相关文章
- bzoj 4002: [JLOI2015]有意义的字符串
这个题... #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #define d ...
- 【BZOJ】4002: [JLOI2015]有意义的字符串
题意 求$\left \lfloor \left( \frac{b+\sqrt{d}}{2} \right)^n \right \rfloor \pmod {7528443412579576937} ...
- [JLOI2015]有意义的字符串
4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1000 Solved: 436[Submit][St ...
- 【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 一行三个整数 ...
- BZOJ4002 [JLOI2015]有意义的字符串
据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...
- 【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法
题意: 给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937 ...
- bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4002 题解 神仙题. 根据下面的一个提示: \[ b^2 \leq d \leq (b+1)^ ...
- [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]
Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...
随机推荐
- Ado.net利用反射执行SQL得到实体
public Model.orderParent GetTraceIDforID(string orderid) { string sql = string.Format(" select ...
- HTTP首部及各状态码
通用首部:客户端和服务器都可以使用的通用首部,比如Status Code: 请求首部:请求首部是请求报文特有的,它们为服务器提供了一些额外信息,例如Accept: */* 用来告知服务器客户端会接受与 ...
- (转)Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...
- wordpress学习-themes-001
这一篇主要是来记录wordpress theme的内容.关于为什么要自己编写wordpress theme的理由,相信大家都有各自的体会.想让自己的博客变的更加突出?更加个性话?wordpress t ...
- HTML5开发规范
1.总体规范——采用html5的结构标签进行页面布局,注意结构的语义化,并注意页面大纲的层级结构.使用css3.0进行样式的设计. a.网页大纲查询网址http://gsnedders.html5.o ...
- xml结构
一.XmlHelper using System; using System.Collections.Generic; using System.Linq; using System.Web; usi ...
- NuGet 的使用
install-package entityframework//Enable-Migrations -ContextTypeName College.Models.CollegeEntities ...
- 第十六章 调试及安全性(In .net4.5) 之 调试程序
1. 概述 本章内容包括 如何选择合适的构建类型.创建和管理编译指令.管理程序数据文件(pdb)和指令. 2. 主要内容 2.1 构建类型 .net中默认的两种生成模式是 发布(Release)模式 ...
- 006-python基础-条件判断与循环
一.条件判断 场景一.用户登陆验证 # 提示输入用户名和密码 # 验证用户名和密码 # 如果错误,则输出用户名或密码错误 # 如果成功,则输出 欢迎,XXX! #!/usr/bin/env pytho ...
- 正确打印含unicode字符的dict
python中,dict 对象转换为类似为 \UXXXX 的格式:这种格式英文称为 code point,完全看不懂:当然,也可以通过这个网站来转换 http://rishida.net/tools/ ...