Sequence(矩阵快速幂变形)2018多校第七场

2023-10-25 04:32

本文主要是介绍Sequence(矩阵快速幂变形)2018多校第七场,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

题意一目了然,中间会改变的矩阵快速幂。

很显然,我并没有做过这种题,只做过中间不会改变的矩阵快速幂。

于是看题解发现我可以在矩阵中多加一个维度来储存每次加上的一个数,开一个三维矩阵。

| d c  [p/i] |        | f(n-1) |

| 1 0    0   |   *   | f(n-2) |

| 0 0    1   |        |     1   |

 

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int a,b,c,d,p,n;struct mart
{int m[4][4];mart(){memset(m,0,sizeof(m));}
}ini;mart operator * (mart a,mart b)
{mart ans;for(int i=1;i<=3;i++)for(int j=1;j<=3;j++){long long t=0;for(int k=1;k<=3;k++)t+=(long long)a.m[i][k]*b.m[k][j];ans.m[i][j]=t%mod;}return ans;
}mart pow(mart a,int b)
{mart ans=ini;while(b){if(b&1)ans=a*ans;a=a*a;b>>=1;}return ans;
}void solve()
{scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&p,&n);if(n==1)    {printf("%d\n",a);return;}mart base;base.m[1][1]=d;base.m[1][2]=c;base.m[2][1]=1;base.m[3][3]=1;for(int i=3;i<=n;){if(p/i==0){long long ans;base=pow(base,n-i+1);ans=base.m[1][1]*(long long)b+base.m[1][2]*(long long)a+base.m[1][3];ans%=mod;printf("%d\n",ans);return;}int j=min(n,p/(p/i));mart tbase=base;tbase.m[1][3]=p/i;tbase=pow(tbase,j-i+1);long long A=tbase.m[2][1]*(long long)b+tbase.m[2][2]*(long long)a+tbase.m[2][3];long long B=tbase.m[1][1]*(long long)b+tbase.m[1][2]*(long long)a+tbase.m[1][3];a=A%mod;b=B%mod;i=j+1;}printf("%d\n",b);
}int main()
{ini.m[1][1]=ini.m[2][2]=ini.m[3][3]=1;int num;scanf("%d",&num);while(num--)solve();return 0;
}

 

这篇关于Sequence(矩阵快速幂变形)2018多校第七场的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280047

相关文章

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python如何快速下载依赖

《Python如何快速下载依赖》本文介绍了四种在Python中快速下载依赖的方法,包括使用国内镜像源、开启pip并发下载功能、使用pipreqs批量下载项目依赖以及使用conda管理依赖,通过这些方法... 目录python快速下载依赖1. 使用国内镜像源临时使用镜像源永久配置镜像源2. 使用 pip 的并

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

csu(背包的变形题)

题目链接 这是一道背包的变形题目。好题呀 题意:给n个怪物,m个人,每个人的魔法消耗和魔法伤害不同,求打死所有怪物所需的魔法 #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>//#include<u>#include<map

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu3389(阶梯博弈变形)

题意:有n个盒子,编号1----n,每个盒子内有一些小球(可以为空),选择一个盒子A,将A中的若干个球移到B中,满足条件B  < A;(A+B)%2=1;(A+B)%3=0 这是阶梯博弈的变形。 先介绍下阶梯博弈: 在一个阶梯有若干层,每层上放着一些小球,两名选手轮流选择一层上的若干(不能为0)小球从上往下移动,最后一次移动的胜出(最终状态小球都在地面上) 如上图所示,小球数目依次为

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码