HDU - 6395 Sequence (分块+快速矩阵幂)
给定递推式:

求Fn.
分析:给出的公式可以用快速矩阵幂运算得到,但 P/n 整除对于不同的i,值是不同的。
可以根据P将3-n分成若干块,每块中P整除n的值是相同的。分块的时候要注意判断。
将每块的快速幂结果累乘得到结果。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int MAXN = 1e5+;
const int SIZE = ;
const int MOD = 1e9+;
int N;
int A, B, C, D, P;
int cc; LL ret_multi[SIZE][SIZE];
void multi(LL a[][SIZE], LL b[][SIZE])
{
memset(ret_multi, , sizeof ret_multi);
for( int i = ; i < SIZE; i++ )
for( int j = ; j < SIZE; j++)
for( int k = ; k < SIZE; k++ )
ret_multi[i][j] = (ret_multi[i][j] + a[i][k] *b[k][j]) %MOD;
for( int i = ; i < SIZE; i++ )
for( int j = ; j < SIZE; j++)
a[i][j] = ret_multi[i][j];
} LL ret_qpow[SIZE][SIZE];
LL base[SIZE][SIZE];
void qpow(LL b[][SIZE], LL index)
{
memset(ret_qpow, , sizeof ret_qpow);
memcpy(base, b, sizeof base); for( int i = ; i < SIZE; i++) ret_qpow[i][i] = ;
while(index){
if( index &)
multi(ret_qpow, base);
index /= ;
multi(base, base);
}
} LL m[][SIZE] = {
{D, C, cc},
{, , },
{, , }
}; LL f[][SIZE] = {
{B, , },
{A, , },
{, , }
}; int getRight(int cc)
{
int L = , R = N;
int ret = N;
while(L <= R){
int mid = L + (R-L)/;
if( P/mid >= cc){
ret = mid;
L = mid+;
}
else R = mid-;
}
return ret;
} vector<PII> range; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif int T; scanf("%d",&T);
while(T--){
range.clear();
scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&P,&N);
if(N==){
printf("%d\n",A); continue;
}
else if(N==){
printf("%d\n",&B); continue;
}
for( int i = ; i <= N; i++ ) //分块
{
int cc = P/i;
int j = getRight(cc);
range.push_back({i, j});
i = j;
} LL m[][SIZE] = {
{D, C, cc},
{, , },
{, , }
}; LL f[][SIZE] = {
{B, , },
{A, , },
{, , }
}; for( PII rng :range){
const int &n1 = rng.first;
const int &n2 = rng.second;
cc = P/n1; m[][] = cc; qpow(m, n2-(n1-));
multi(ret_qpow, f); memcpy(f, ret_multi, sizeof f);
}
printf("%lld\n",f[][]%MOD);
}
return ;
}
HDU - 6395 Sequence (分块+快速矩阵幂)的更多相关文章
- HDU 6395 Sequence(分段矩阵快速幂)题解
题意: 已知\(A,B,C,D,P,n\)以及 \[\left\{ \begin{aligned} & F_1 = A \\ & F_2 = B\\ & F_n = C*F_{ ...
- CodeForces621E 快速矩阵幂优化dp
有时些候在用快速矩阵幂优化dp的时候,它的矩阵乘法是不那么容易被具体为题目背景的意思的,大多数时候难以理解矩阵之间相乘的实际意义,正如有时候我们不知道现在在做手头这些事情的意义,但倘若是因一个目标而去 ...
- Java大数——快速矩阵幂
Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...
- HDU 6395 Sequence 【矩阵快速幂 && 暴力】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) ...
- HDU----(4291)A Short problem(快速矩阵幂)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU - 6395 Sequence (整除分块+矩阵快速幂)
定义数列: $\left\{\begin{eqnarray*} F_1 &=& A \\ F_2 &=& B \\ F_n &=& C\cdot{}F_ ...
- Tr A(HDU 1575 快速矩阵幂模板)
Tr A Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- HDU----(2157)How many ways??(快速矩阵幂)
How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- Bootstrap Multiselect 设置 option
$.ajax({ type: 'post', url: "helper/ajax_search.php", data: {models: decodeURIComponent(br ...
- python - 判断是否为正小数和正整数
判断输入的金额是否为正整数和正小数 def check_float(string): #支付时,输入的金额可能是小数,也可能是整数 s = str(string) if s.count('.') == ...
- html5 webwork
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...
- Java面试题全集(上)(中)(下) (转)+自己总结
Java面试题 自己总总结 https://www.cnblogs.com/songanwei/p/9366427.html Java面试题全集(上) https://blog.csdn.net/ja ...
- Java每日一题
1.(单选题)What will be printed when you execute the following code? class C { C() { System.out.print(&q ...
- AtomicInteger保证线程安全的全局变量
现有业务场景需要做一个线程间的全局变量,并且实现自增效果. 初始使用了volatile 来保证count的安全性,如下: import java.util.concurrent.ExecutorSer ...
- jQuery中如何给动态添加的元素绑定事件
jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...
- hdu4565(矩阵快速幂+经典的数学处理)
注意题目的一个关键条件(a-1)2< b < a2 , 于是可以知道 0 < a-√b < 1 ,所以 (a-√b)^n < 1 . 然后 (a+ √b)^n+(a ...
- 【BZOJ3166】[Heoi2013]Alo 可持久化Trie树+set
[BZOJ3166][Heoi2013]Alo Description Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , ...
- angualar入门学习-- 自定义指令 认识属性
个AngularJS指令在HTML代码中可以有四种表现形式: 1.作为一个新的HTML元素来使用 2.作为一个元素的属性来使用 3.作为一个元素的类来使用 4.作为注释来使用 一.创建指令 angul ...