题目链接

掌握了分块打表法了。原来以前一直想错了。。。

块的大小\(size=\sqrt n\),每隔\(size\)个数打一个表,还要在\(0\text{~}size-1\)每个数打一个表。

然后就可以做到\(O(1)\)查询了。

比如要求\(A^{n}\),只需要算出\(biao[n/size]*pow[n\mod size]\)就好了。

然后我是看题解用了通项公式。。事实上套个矩阵也没有影响。

#include <cstdio>
#include <cmath>
#define ll unsigned long long
#define MOD 1000000007
namespace Mker{
ll SA,SB,SC;
void init(){scanf("%llu%llu%llu",&SA,&SB,&SC);}
ll rand(){
SA^=SA<<32,SA^=SA>>13,SA^=SA<<1;
ll t=SA;
SA=SB,SB=SC,SC^=t^SA;return SC;
}
}
int T, ans, tmp, a[1000010], b[1000010], c[1000010], d[1000010], e, size;
int n;
inline int f_pa(int k){
return (long long)a[k / size] * c[k % size] % MOD;
}
inline int f_pb(int k){
return (long long)b[k / size] * d[k % size] % MOD;
}
inline void make_a(int n, int k){
tmp = 1;
while(k){
if(k & 1) tmp = (long long)tmp * n % MOD;
n = (long long)n * n % MOD;
k >>= 1;
}
a[e] = tmp;
}
inline void make_b(int n, int k){
tmp = 1;
while(k){
if(k & 1) tmp = (long long)tmp * n % MOD;
n = (long long)n * n % MOD;
k >>= 1;
}
b[e] = tmp;
}
int main(){
size = sqrt(1000000006); c[0] = d[0] = 1;
for(int i = 0; i <= 1000000006; i += size, ++e)
make_a(94153035, i), make_b(905847205, i);
for(int i = 1; i < size; ++i) c[i] = (long long)c[i - 1] * 94153035 % MOD;
for(int i = 1; i < size; ++i) d[i] = (long long)d[i - 1] * 905847205 % MOD;
scanf("%d", &T);
Mker::init();
while(T--){
n = Mker::rand() % 1000000006;
ans ^= (233230706ll * (f_pa(n) - f_pb(n)) % MOD + MOD) % MOD;
}
printf("%d\n", ans);
return 0;
}

【洛谷 P5110】 块速递推(矩阵加速,分块打表)的更多相关文章

  1. 洛谷 P5110 块速递推

    题目大意: 给定一个数列a满足递推式 \(An=233*an-1+666*an-2,a0=0,a1=1\) 求这个数列第n项模\(10^9+7\)的值,一共有T组询问 \(T<=10^7\) \ ...

  2. 洛谷P5110 块速递推 [分块]

    传送门 思路 显然可以特征根方程搞一波(生成函数太累),得到结果: \[ a_n=\frac 1 {13\sqrt{337}} [(\frac{233+13\sqrt{337}}{2})^n-(\fr ...

  3. P5110 块速递推-光速幂、斐波那契数列通项

    P5110 块速递推 题意 多次询问,求数列 \[a_i=\begin{cases}233a_{i-1}+666a_{i-2} & i>1\\ 0 & i=0\\ 1 & ...

  4. P5110 块速递推

    传送门 为啥我就没看出来有循环节呢-- 打表可得,这个数列是有循环节的,循环节为\(10^9+6\),然后分块预处理,即取\(k=sqrt(10^9+6)\),然后分别预处理出转移矩阵\(A\)的\( ...

  5. P5110 【块速递推】

    太菜了,不会生成函数,于是用特征方程来写的这道题 首先我们知道,形如\(a_n=A*a_{n-1}+B*a_{n-2}\)的特征方程为\(x^2=A*x+B\) 于是此题的递推式就是:\(x^2=23 ...

  6. Luogu5110 块速递推

    题面 题解 线性常系数齐次递推sb板子题 $a_n=233a_{n-1}+666a_{n-2}$的特征方程为 $$ x^2=233x+666 \\ x^2-233x+666=0 \\ x_1=\fra ...

  7. 洛谷P1240-诸侯安置+递推非搜索

    诸侯安置 这道题是一题递推题,一开始自己不知道,用了搜索,只过了三个样例: 两两相同的合并, 成 1,1,3,3,5,5........n*2-1; 然后我们会容易发现一种不同与搜索的动态规划做法. ...

  8. P5110-块速递推【特征方程,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列\(a\)满足 \[a_n=233a_{n-1}+666a_{n-2},a_0=0,a_1= ...

  9. 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]

    题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...

随机推荐

  1. <Effective C++>读书摘要--Accustoming Youself to C++

    <Item 1>View C++ as a federation of languages. 1.把C++看成4种子语言组成,即C.Object-Oriented C++.Template ...

  2. 关于命令行参数argv(《学习OpenCV》)

    在<学习OpenCV>这本书中,很多示例代码都用到了命令行参数.作为新手,之前总是很困扰,不知道怎么用.偶然的机会终于略知一二了. 在Visual Studio中,我们可以自行设置命令行参 ...

  3. JDK版本Java SE、Java EE、Java ME的区别

    想在win7 X64上搭建JAVA开发环境来着(只是尝试下),打开JAVA 官网下载JDK,发现好多版本懵了,百度了下找到这些版本的区别,故有了下文 1.JAVA SE Java2平台标准版(Java ...

  4. hdu5575 Discover Water Tank

    题意: 给出个水箱,水箱两侧有无限高的隔板,水箱内有整数高度的隔板将水箱分成n-1份,现在给出m个限制,每个限制表示某个位置的某个高度有水或没水,问最多能同时满足多少个限制.n,m<=2*10^ ...

  5. BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)

    一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...

  6. poj 1274 The Perfect Stall (二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17768   Accepted: 810 ...

  7. hdu 1879 继续畅通工程 (最小生成树)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  8. Oracle 转义字符

    id sfds_V_SF ASD_V_DSAF SD_V_DSAD   下划线是Oracle特殊字符,需要转移,如下    select * from systab t where t.id like ...

  9. [2018国家集训队][UOJ449] 喂鸽子 [dp+组合数学]

    题面 传送门 思路 首先,这道题是可以暴力min-max反演+NTT做出来的......但是这个不美观,我来讲一个做起来舒服一点的做法 一个非常basic的idea:我们发现在一只鸽子吃饱以后再喂给它 ...

  10. 122. Best Time to Buy and Sell Stock II (Array)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...