[BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]
Description
Solution
由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数。
而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\frac{b-\sqrt{d}}{2})^{n}$的范围为(-1,1)的性质。
则$ans=((\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}=b*a_{n-1}+\frac{(d-b^{2})}{4}*a_{n-2}$
其中,边界a0=2,a1=b。
然后矩阵乘法就好啦。(备注:由于此处两个数相乘会过大,需要用到快速乘法,log(n)的那种)
最后,如果 $(\frac{b-\sqrt{d}}{2})^{n}\geqslant 0$,则由于题目向下取整,可以忽略;
故只有$b^{2}\neq d$且n为奇数才需要对答案减一。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef unsigned long long ull;
const ull mod=7528443412579576937ull;
ull b,d,n;
ull mul(ull a,ull b)
{
ull ans=;
while(b)
{
if(b&) ans=(a+ans)%mod;
b>>=;a=(a+a)%mod;
}
return ans;
}
struct Matrix{ull x[][];
friend Matrix operator*(Matrix a,Matrix b)
{
Matrix c;memset(c.x,,sizeof(c.x));
for (int i=;i<=;i++)
for (int j=;j<=;j++)
for (int k=;k<=;k++)
c.x[i][j]=(c.x[i][j]+mul(a.x[i][k],b.x[k][j]))%mod;
return c;
}
}a;
Matrix ksm(Matrix a,ull t)
{
Matrix ans;memset(ans.x,,sizeof(ans.x));
ans.x[][]=ans.x[][]=;
while (t)
{
if (t&) ans=ans*a;
t>>=;
a=a*a;
}
return ans;
}
ull ans;
int main()
{
scanf("%llu%llu%llu",&b,&d,&n);
if (!n) {printf("");return ;}
a.x[][]=b;
a.x[][]=(d-b*b)/%mod;
a.x[][]=;
a.x[][]=;
a=ksm(a,n-);
ans=(mul(b,a.x[][])+mul(,a.x[][]))%mod;
if (d!=b*b&&!(n&)) ans--;
if (ans<) ans+=mod;
cout<<ans;
}
[BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]的更多相关文章
- 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]有意义的字符串
据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...
- BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】
题目链接 BZOJ4002 题解 容易想到\(\frac{b + \sqrt{d}}{2}\)是二次函数\(x^2 - bx + \frac{b^2 - d}{4} = 0\)的其中一根 那么就有 \ ...
- 【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)
[BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...
- 【BZOJ4002】[JLOI2015]有意义的字符串 数学
[BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...
- BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法
BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...
- [JLOI2015]有意义的字符串
4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1000 Solved: 436[Submit][St ...
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...
随机推荐
- SpringMvc+Spring+MyBatis+Maven
使用Maven构建项目 1) 创建一个Maven的war工程 2) 在webapp/WEB-INF下创建一个web.xml文件 <?xml version="1.0" enc ...
- Java并发案例04---生产者消费者问题03--使用ReentrantLock
/** * 面试题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法, * 能够支持2个生产者线程以及10个消费者线程的阻塞调用 * * 使用wait和notify/notif ...
- Zookeeper学习之路 (一)初识
本文引用自 http://www.cnblogs.com/sunddenly/p/4033574.html 引言 Hadoop 集群当中 N 多的配置信息如何做到全局一致并且单点修改迅速响应到整个集群 ...
- E、CSL 的魔法 【模拟】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)
题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 有两个长度为 n 的序列,a0,a1,…,an−1a0,a1,…,an−1和 b ...
- D、CSL 的字符串 【栈+贪心】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)
题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. ...
- SpringMVC DELETE,PUT请求报错 添加支持Http的DELETE、PUT请求
SpringMVC删除与修改操作需要用DELETE,PUT请求方式提交. 但要知道浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不支持. spring3.0添加了 ...
- maven 编译替换占位符
首先开启资源配置的插件,由此插件替换占位符 <plugin> <groupId>org.apache.maven.plugins</groupId> <art ...
- myeclipse2014黑色主题风格设置
http://jingyan.baidu.com/article/915fc41494db8451384b2043.html?st=2&os=0&bd_page_type=1& ...
- centos6.4安装使用wine 持续更新中
首先,从wine的官网下载页面http://www.winehq.org/download/可以了解到centos安装wine需要EPEL软件仓库.那么首先安装EPEL软件仓库,从http://mir ...
- UGA,PGA
tom认为UGA不包含 sort工作区,所以下面的图都是错误的 The UGA is, in effect, your sessions state. It is memory that your ...