据说这两场加起来只要170= =而这是最简单的题目了QAQ

看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } {2} )^n$

首先有$(\frac {b + \sqrt {d} } {2} )^n + (\frac {b - \sqrt {d} } {2} )^n$为整数

由高中课本知识可知,上式其实是一个三项递推数列的通项公式,而数列的递推式非常简单

$$f[x] = b * f[x - 1] - \frac{b^2 - d} {4} * f[x - 2]$$

其中$f[0] = 2, f[1] = b$,这样子直接矩阵乘法就好啦~

再看$A = (\frac {b - \sqrt {d} } {2} )^n \in [-1, 1]$

然后。。。然后发现bzoj上题面错了QAQ,实际上是"对于20%的数据$b=1,d=5$"

故$A > 0$当且仅当$d \not= b^2$且$n$为偶数,此时要将$f[n]$减掉$1$,否则不用减

 /**************************************************************
Problem: 4002
User: rausen
Language: C++
Result: Accepted
Time:48 ms
Memory:1272 kb
****************************************************************/ #include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm> using namespace std;
typedef unsigned long long ll;
const ll mod = 7528443412579576937ull; template <class T> T sqr(T x) {
return x * x;
} template <class T> T mul(T x, T y) {
static T res;
if (x < y) swap(x, y);
res = ;
while (y) {
if (y & ) res = (res + x) % mod;
x = (x << ) % mod, y >>= ;
}
return res;
} ll b, d, n; struct mat {
ll x[][]; inline void clear() {
memset(x, , sizeof(x));
}
inline void one() {
memset(x, , sizeof(x));
x[][] = x[][] = ;
}
inline void pre() {
this -> clear();
x[][] = , x[][] = (d - sqr(b)) >> , x[][] = , x[][] = b;
} inline ll* operator [] (int i) {
return x[i];
} inline mat operator * (const mat &p) const {
static mat res;
static int i, j, k;
for (res.clear(), i = ; i <= ; ++i)
for (j = ; j <= ; ++j)
for (k = ; k <= ; ++k)
res[i][j] = (res[i][j] + mul(x[i][k], p.x[k][j])) % mod;
return res;
}
inline mat& operator *= (const mat &p) {
return *this = *this * p;
}
} a; inline mat pow(const mat &p, ll y) {
static mat x, res;
res.one(), x = p;
while (y) {
if (y & ) res *= x;
x *= x, y >>= ;
}
return res;
} int main() {
cin >> b >> d >> n;
a.pre();
a = pow(a, n);
cout << (((a[][] << ) % mod + mul(b, a[][]) - (d != sqr(b) && !(n & ))) % mod + mod) % mod << endl;
return ;
}

BZOJ4002 [JLOI2015]有意义的字符串的更多相关文章

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

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

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

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

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

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

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

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

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

    [BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...

  6. 【BZOJ4002】[JLOI2015]有意义的字符串 数学

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

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

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

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

    4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1000  Solved: 436[Submit][St ...

  9. 【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法

    题意: 给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937 ...

随机推荐

  1. C# 线程(三):如何操纵一个线程

    From : http://kb.cnblogs.com/page/42529/ 下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可.(线程入口使程序知道该让这个线程干什 ...

  2. NOJ 1063 生活的烦恼

    描述 生活的暑假刚集训开始,他要决心学好字典树,二叉树,线段树和各种树,但生活在OJ上刷题的时候就遇到了一个特别烦恼的问题.那当然就是他最喜欢的二二叉树咯!题目是这样的:给你一颗非空的二叉树,然后再给 ...

  3. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法

    打开所在的wordspace文件夹,在下面子文件夹 .metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse ...

  4. html textarea 获取换行

    1.需求: 获取textarea中的换行符,存到数据库中,并在取出时显示出换行操作 2.实践 2.1 发现可以取到换行符 "/n" ,并且可以存储到MySQL数据库中,并不需要特殊 ...

  5. Android手机_软件安装目录

    1. /data/data ==> 应该是 数据存放的位置 /data/app ==> 应该是 程序存放的位置 2.

  6. Codeforces708C Centroids 【树形dp】

    题目链接 题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2? 题解:树形dp,两遍dfs,第一遍df ...

  7. 百度web前端面试2015.10.18

    邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对 ...

  8. nodejs学习笔记<四>处理请求参数

    在web开发中处理请求参数是个非常常见的工作:nodejs提供了了querystring用来处理请求参数. querystring常用方法有:parse,stringify. (1)parse: 解析 ...

  9. select实现输入模糊匹配与选择双重功能

    下载jqueryUI插件 引入 <link rel="stylesheet" type="text/css" href="/js/jquery/ ...

  10. poj2208Pyramids(四面体面积--公式)

    链接 一公式题.. 证明讲解参照http://www.cnblogs.com/dgsrz/articles/2590309.html 注意对棱 顺序 #include <iostream> ...