(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

Catalog

Problem:Portal传送门

 原题目描述在最下面。

Solution:

 一看矩阵快速幂,再一看怎么多一个变项?\(⌊ \frac{p}{n}⌋\)?

 我去,\(⌊ \frac{p}{n}⌋\)这不是前几天写过的一道除法分块经典题吗?

 关于除法分块,请看这里:GYM101652

 然后,就没有然后了~

AC_Code:

#include<bits/stdc++.h>
#define mme(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long LL;
const int MXN = 5e5+7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int n;
LL A,B,C,D,P;
struct lp{
LL ar[3][3];
}aa, bb, cc;
lp exe(lp a,lp b,int n,int m,int h){
lp c; memset(c.ar,0,sizeof(c.ar));
for(int k = 0; k < m; ++k){
for(int i = 0; i < n; ++i){
if(a.ar[i][k] == 0) continue;
for(int j = 0; j < h; ++j){
if(b.ar[k][j] == 0) continue;
c.ar[i][j] += a.ar[i][k] * b.ar[k][j];
c.ar[i][j] %= MOD;
}}}
return c;
}
lp ksm(lp a, LL b, int n){
lp ret;
for(int i=0;i<n;++i) for(int j=0;j<n;++j) ret.ar[i][j]=(i==j);
while(b>0){
if(b&1) ret=exe(ret, a, n, n, n);
a = exe(a, a, n, n, n); b >>= 1;
}
return ret;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("E://ADpan//in.in", "r", stdin);
//freopen("E://ADpan//out.out", "w", stdout);
#endif
int tc = 0;
int tim;
scanf("%d", &tim);
while(tim--){
scanf("%lld%lld%lld%lld%lld%d", &A,&B,&C,&D,&P,&n);
if(n == 1){
printf("%lld\n", A);
continue;
}else if(n == 2){
printf("%lld\n", B);
continue;
}else if(n == 3){
printf("%lld\n", (B*D%MOD+A*C%MOD+P/3)%MOD);
continue;
}
/*aa.ar[3][3] = {
{D,1LL,0LL},
{C,0LL,0LL},
{xLL,0LL,1LL},
};*/
memset(aa.ar,0,sizeof(aa.ar));
memset(bb.ar,0,sizeof(bb.ar));
aa.ar[0][0]=D;
aa.ar[1][0]=C;
aa.ar[0][1]=1;
aa.ar[2][2]=1;
bb.ar[0][0]=B;
bb.ar[0][1]=A;
bb.ar[0][2]=1;
/*bb.ar[3][3] = {
{B,A,1},
};*/ //这是参考大佬的写法一
for(LL l = 3, r; l <= n; l = r + 1){
if(P/l) r = min(P/(P/l),n*1LL);
else r = n;
aa.ar[2][0] = P/l;
cc = ksm(aa, r-l+1, 3);
bb = exe(bb, cc, 3, 3, 3);
} /*这是我本来繁琐的写法
for(LL l = 3, r; l <= P; l = r + 1){
r = min(P/(P/l),n*1LL);
aa.ar[2][0] = P/l;
cc = ksm(aa, r-l+1, 3);
bb = exe(bb, cc, 3, 3, 3);
if(r == n * 1LL)break;
}
if(P <= n - 1){
LL m = n - (P+1)+1;
aa.ar[2][0] = 0;
if(P<3)m = n-2;
cc = ksm(aa, m, 3);
bb = exe(bb, cc, 3, 3, 3);
}*/
printf("%lld\n", bb.ar[0][0]);
}
return 0;
}

Problem Description:

模板:

typedef vector<long long> vec;
typedef vector<vec > mat; mat Mul(mat a, mat b) {
mat c(a.size(), vec(b[0].size()));
for(int k = 0; k < b.size(); ++k) {
for(int i = 0; i < a.size(); ++i) {
if(a[i][k] == 0) continue;
for(int j = 0; j < b[0].size(); ++j) {
c[i][j] = (c[i][j] + a[i][k] * b[k][j])%mod;
}
}
}
return c;
}
mat mat_ksm(mat a, LL b) {
mat res(a.size(), vec(a.size()));
for(int i = 0; i < a.size(); ++i) res[i][i] = 1;
while(b) {
if(b&1) res = Mul(res, a);
a = Mul(a, a);
b >>= 1;
}
return res;
}
LL fib_n(LL n) {
mat a(2, vec(2));
a[0][0] = 1; a[0][1] = 1;
a[1][0] = 1; a[1][1] = 0;
a = mat_ksm(a, n);
return a[1][0];
}

HDU6395-Sequence 矩阵快速幂+除法分块 矩阵快速幂模板的更多相关文章

  1. 杭电多校第七场 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 ...

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

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

  3. 《Linear Algebra and Its Applications》-chaper2-矩阵代数-分块矩阵

    分块矩阵的概念: 在矩阵的实际应用中,为了形式的更加简化我们将一个较大的矩阵的内部进行一定的划分,使之成为几个小矩阵,然后在表大矩阵的时候,矩阵的内部元素就用小矩阵代替. 进行了这一步简化,我们就要分 ...

  4. 求幂大法,矩阵快速幂,快速幂模板题--hdu4549

    hdu-4549 求幂大法.矩阵快速幂.快速幂 题目 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 ...

  5. HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过

    A Simple Math Problem 一个矩阵快速幂水题,关键在于如何构造矩阵.做过一些很裸的矩阵快速幂,比如斐波那契的变形,这个题就类似那种构造.比赛的时候手残把矩阵相乘的一个j写成了i,调试 ...

  6. Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ...

  7. P2424 约数和 && 真丶除法分块

    P2424 约数和 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f ...

  8. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

  9. Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)

    1287 矩阵乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 小明最近在为线性代数而头疼, ...

随机推荐

  1. 简单理解Ext.extend

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Linux网卡驱动(4)—DM9000网卡驱动程序完全分析

    1.硬件连接 mini2440开发板上DM9000的电气连接和mach-mini2440.c文件的关系 其中片选信号AEN使用了nGCS4,所以网卡的内存区域在BANK4,也就是从地址0x200000 ...

  3. 2018—2019—2 20165239《网络对抗技术》Exp7 网络欺诈防范

    一.原理与实践说明 1.实践目标 本实践的目标是:理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2.实践内容概述 简单应用SET工具建立冒名网站 (1分) ettercap DNS ...

  4. 正则化:L0 vs L1 vs L2

    原文地址:https://www.jianshu.com/p/e5c9a9fc84d4 为什么正则化可以缓解过拟合? 过拟合时,拟合函数的系数往往非常大.过大的权重会导致模型过多地学习到某些数据的个性 ...

  5. Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

    目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...

  6. LitJson使用中的一些问题

    http://blog.csdn.net/n5/article/details/45030063

  7. nginx配置跨域

    location / { if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*' always;a ...

  8. response和ServletContext和乱码问题

    服务器端以/开始就代表当前项目名客户端必须以 /项目名/资源 才能定位到资源 软件与软件之间,以字符为标准传递,传递字节,接收端自己按原来的编码集编码之后再按照自己的编码集解码编码(如果没有对应字符, ...

  9. mariadb入门

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...

  10. java-day23

    事务的四大特征: 1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败. 2.持久性:当事务提交或回滚后,数据库会持久化的保存数据. 3.隔离性:多个事务之间,相互独立. 4.一致性:事务 ...