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 ...
随机推荐
- Transporting Data Between Database
The Export utility can provide a logical backup of: Database objects A tablespace An entire database ...
- 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1596 一开始交了个貌似正确的dp,wa了. 我只考虑了儿子覆盖的情况,没有考虑父亲QAQ 那么我们要 ...
- win7 激活相关
命令 slui 1 slui 2 slui 3 slui 4 slmgr.vbs 需打开的服务 需要开启software protection和 SPP Notification service这两个 ...
- 【Raspberry pi+python+mysql】红外传感器-发邮件-存数据库
1.mysql http://dev.mysql.com/doc/refman/5.5/en/tutorial.html mysql+python http://dev.mysql.com/doc/c ...
- npm中本地安装命令行类型的模块是不注册Path的
http://www.jianshu.com/p/c04dea6e46de 首先有必要解释下什么是命令行(Command Line)类型的模块.npm的模块一共分为三类: 绑定型(Binding):本 ...
- Ruby on Rails 初次冲浪体验
为了更好的阅读体验,欢迎訪问 作者博客原文 Rails is a web application development framework written in the Ruby language. ...
- hdu 2074 叠筐 好有意思的绘图题
叠筐 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- Java Base64解析
最近在业务场景中,需要对第三方传递进来的字符进行base64解密,根据第三方文档提供的解析工具,对数据进行了解析,关于Base64的解析方式如下: String sign = "xxxxxx ...
- NATS源代码分析之auth目录
NATS是一个轻量的消息发布-订阅系统.NATS的核心是Event machine. 项目Server端源代码地址: github.com/nats-io/gnatsd 在auth目录中, multi ...
- Sublime text 3 快捷键:
Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码. Ctrl+Shift+] 选中代码,按下快捷键,展开代码. Ctrl+Shift+P:打开命令面板 Ctrl+P:打开搜索框,搜索项目 ...