hdu6395 /// 分块矩阵快速幂
题目大意:
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 /// 分块矩阵快速幂的更多相关文章
- hdu6395 (矩阵快速幂+分块)
Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In Hand Onli ...
- 杭电多校第七场 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 ...
- HDU-6395 多校7 Sequence(除法分块+矩阵快速幂)
Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- [hdu-6395]Sequence 分块+矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6395 因为题目数据范围太大,又存在递推关系,用矩阵快速幂来加快递推. 每一项递推时 加的下取整的数随 ...
- 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里是不变的,可以数论分块,再在每一段里 ...
- HDU - 6395 Sequence (整除分块+矩阵快速幂)
定义数列: $\left\{\begin{eqnarray*} F_1 &=& A \\ F_2 &=& B \\ F_n &=& C\cdot{}F_ ...
- HDU6395-Sequence 矩阵快速幂+除法分块 矩阵快速幂模板
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. Solution ...
- HDU6395(分段+矩阵快速幂)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6395 给你一个式子,给出你A,B,C,D,P,n,让你求出第n项的式子Fn.(其中ABCDPn均在1e9的 ...
- BZOJ2326 [HNOI2011]数学作业(分块矩阵快速幂)
题意: 定义函数Concatenate (1 ..N)是将所有正整数 1, 2, …, N 顺序连接起来得到的数,如concatenate(1..5)是12345,求concatenate(1...n ...
随机推荐
- python学习笔记:操作数据库
1.下载安装模块 第一种:cmd下:执行命令下载安装:pip3 install pymysql 第二种:IDE下pycharm python环境路径下添加模块 2.连接数据库 import pymys ...
- Java对象相等比较(Equals)
以下代码显示如何实现equals()和hashCode()方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- UVA1152_4 Values whose Sum is 0
中途相遇法,这题目总结后我感觉和第一篇博客很像,他们都取了中间,也许这就是二分的魅力吧 这题题意就是从ABCD四个集合中选四个元素使他们的和为0 题意很简单,但是实现起来很容易超时,不能一个一个枚举 ...
- Struct和Union的sizeof计算
struct 结构体的大小不是简单的成员相加,要考虑存储空间的字节对齐 1.空结构体的大小为1 2.含有static的结构体在计算大小时不算上static变量,因为static存储在全局数据空间,而s ...
- es+mongodb 整合
之前公司项目的数据都是从mysql查询,后面需求变更:同时技术上相应的也要改变策略,决定将mongodb和mysql的数据通过es建立索引来查询: 对于还没有接触或者真正了解es的可以先看一下相关Lu ...
- CF1216X
由于rating限制,和慎老师用小号打了一场div 3 从A到F都没啥思维含量..感觉最难想的就是C了?? CF1216C 考完以后想hack一下这道题,然后发现满屏都是分类讨论 我大概是写不动 or ...
- -k 组合调用执行部分用例
场景:只执行符合要求的某一部分用例,通过类与方法的命名实 现.通常编写测试方法时 • 解决:使用-k • pytest -k "TestClass and test_one" • ...
- dentityServer4(1)- 特性一览
本地应用只本地客户端应用,例如QQ.微信 IdentityServer4是ASP.NET Core 2的OpenID Connect和OAuth 2.0框架.它可以在您的应用程序中提供以下功能: 它使 ...
- 自定义servlet重写doGet或者doPost方法时,405 method not allowed
自定义servlet public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServlet ...
- Samba服务的安装
Samba的安装 1.准备环境 Centos7 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce ...