题目大意:

F(1)=A, F(2)=B,  F(i)=C*F(i-2)+D*F(i-1)+p/i(向下取整)

给定A B C D p n

求F(n)

构造

   矩阵A    *    矩阵B        =          矩阵C

┌ F(n-2) F(n-1) 1  ┐    ┌ 0   C  0  ┐        ┌ F(n-1) F(n)   1   ┐

|      0  0   0    | *   |  1   D  0  |   =    |      0  0   0    |

└  0     0   0 ┘    └ 0  p/i 1 ┘  └  0     0   0 ┘

那么当A为第一项时  A*(B^n)=第n项

因为p/i向下取整所以在 1~n的范围中 p/i的数值是多段相等的

如n=10 p=15 那么1~n中 p/i为 15 7 5 3 3 2 2 1 1 1

改变B中的p/i 分别求B^len 即 B^1 B^1 B^1 B^2 B^2 B^3

已知 p / i = x 那么len = min( p / ( p / i ) , n )  都是int型向下取整

就得到了分块的 B^n

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LLINF 0x3f3f3f3f3f3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
const int N=;
const int mod=1e9+; LL A,B,C,D,p,n;
struct MAT {
LL a[N][N];
MAT(){ mem(a,); }
MAT operator*(MAT p) {
MAT res;
for(int i=;i<N;i++)
for(int j=;j<N;j++)
for(int k=;k<N;k++)
res.a[i][j]=(res.a[i][j]+a[i][k]*p.a[k][j])%mod;
return res;
}
}Ans,Pow;
MAT mod_pow(MAT A,int x) {
MAT res;
res.a[][]=res.a[][]=res.a[][]=;
while(x) {
if(x&) res=res*A;
A=A*A; x>>=;
}
return res;
}
int main()
{
int t; scanf("%d",&t);
while(t--) {
scanf("%lld%lld%lld%lld%lld%lld",&A,&B,&C,&D,&p,&n);
Ans.a[][]=A, Ans.a[][]=B, Ans.a[][]=;
Pow.a[][]=Pow.a[][]=;
Pow.a[][]=C, Pow.a[][]=D;
for(int x=,px;x<=n;x=px+) {
px= p/x ? min(p/(p/x),n):n;
Pow.a[][]=p/x;
MAT t=mod_pow(Pow,px-x+); // x~px的值都为p/x
Ans=Ans*t;
}
printf("%lld\n",Ans.a[][]);
} return ;
}

hdu6395 /// 分块矩阵快速幂的更多相关文章

  1. hdu6395 (矩阵快速幂+分块)

    Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In Hand Onli ...

  2. 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)

    Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...

  3. HDU-6395 多校7 Sequence(除法分块+矩阵快速幂)

    Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. [hdu-6395]Sequence 分块+矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6395 因为题目数据范围太大,又存在递推关系,用矩阵快速幂来加快递推. 每一项递推时  加的下取整的数随 ...

  5. HDU6395 Sequence(矩阵快速幂+数论分块)

    题意: F(1)=A,F(2)=B,F(n)=C*F(n-2)+D*F(n-1)+P/n 给定ABCDPn,求F(n) mod 1e9+7 思路: P/n在一段n里是不变的,可以数论分块,再在每一段里 ...

  6. HDU - 6395 Sequence (整除分块+矩阵快速幂)

    定义数列: $\left\{\begin{eqnarray*} F_1 &=& A \\ F_2 &=& B \\ F_n &=& C\cdot{}F_ ...

  7. HDU6395-Sequence 矩阵快速幂+除法分块 矩阵快速幂模板

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面. Solution ...

  8. HDU6395(分段+矩阵快速幂)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6395 给你一个式子,给出你A,B,C,D,P,n,让你求出第n项的式子Fn.(其中ABCDPn均在1e9的 ...

  9. BZOJ2326 [HNOI2011]数学作业(分块矩阵快速幂)

    题意: 定义函数Concatenate (1 ..N)是将所有正整数 1, 2, …, N 顺序连接起来得到的数,如concatenate(1..5)是12345,求concatenate(1...n ...

随机推荐

  1. 【React】react&&redux调试工具

    一.React调试工具 1.安装 react-developer-tools,在chrome应用商店进行下载,因为网络限制原因,我们可以使用火狐浏览器进行安装下载 a.打开火狐浏览器的附加组件 b.搜 ...

  2. 洛谷P1629 邮递员送信 最短路-Djistra

    先上一波题目qwq https://www.luogu.org/problem/P1629· 复习了一波 dijstra 的 priority_queue(优先队列)优化的写法 tips: 求单项路中 ...

  3. 一,Jetty启动

    一,Jetty安装 从官网download.eclipse.org/jetty/ 下载需要的版本,在指定目录解压即可,下面用$JETTY_HOME表示Jetty的解压目录,也就是安装目录.我用的版本是 ...

  4. python面试题之如何用Python找出你目前在哪个目录?

    >>> import os >>> os.getcwd() 'C:\Users\lifei\AppData\Local\Programs\Python\Python ...

  5. 使用JMail发送邮件

    使用JMail做最简单的文本邮件发送: 第一步.下载JMail和JAF 第二步.解压放到本地classpath中 第三步.使用: public class MailService{    privat ...

  6. shell位置参数和 shift 命令

  7. Spring Cloud服务保护

    微服务虽然解决了传统单体式应用各个模块之间强耦合的缺点,但同时也引出了新问题,由于微服务各个服务之间是独立部署的,并且一般情况下一个服务往往会依赖多个其他服务,并且服务之间的调用更多的是依赖不稳定的网 ...

  8. day04 python列表 元组 range()

    day04 python   一.列表 1.什么是列表     列表是可变的数据类型: 和字符串不同, 做的操作直接改源数据     列表由[]来表示, 每项元素用逗号隔开.列表什么都能装,能装对象的 ...

  9. vue 学习八 自定义指令

    vue指令注册有两种方式 1 全局注册 在main.js中 使用vue.directive Vue.directive('alert_w', { inserted(el,bin,vn) { conso ...

  10. poj 2752 kmp的next数组

    题目大意: 求一个字符串中某一个既是前缀又是后缀的前缀的结尾下标: 基本思路: 从_next[len]开始找_next[_next[len]],再找_next[_next[_next[len]]],一 ...