[迷宫寻路 Round 3] 七连击

news/2025/10/8 17:59:55/文章来源:https://www.cnblogs.com/lrj3247/p/19129916

转化题意:求将一段序列划分为8段,求所有方案的前七段的每一段gcd的和的和.

首先朴素的dp很容易想到,设\(dp(i,j)\)为将前\(i\)位划分为前\(j\)段的答案,\(g(i,j)\)为将前\(i\)位划分为前\(j\)段的方案数.

于是有

\[\begin{aligned} g_{i,j} &= \sum_{k = 1}^{i-1} g_{k,j-1} \\ f_{i,j} &= \sum_{k = 1}^{i-1} f_{k,j-1}+g_{k,j-1}\times gcd(k+1,i) \end{aligned} \]

注:\(gcd(i,j)\)在本文中为序列第\(i\)为到第\(j\)位的\(gcd\)

其中\(gcd\)部分可用ST表\(O(nlogn)\)预处理后,\(O(1)\)求出,\(g\)数组也很显然前缀和\(O(n^2)\)求出,接下来只需要考虑\(f\)的处理

拆开有:

\[\begin{aligned} f_{i,j} &=\sum_{k = 1}^{i-1} f_{k,j-1}+\sum_{k = 1}^{i-1} g_{k,j-1}\times gcd(k+1,i)\end{aligned} \]

左侧很显然可以前缀和\(O(n^2)\)求.

右侧若无\(gcd\)这一项,那也可以前缀和,那如何去掉\(gcd\)的影响呢?

考虑当\(i\)确定时,\(gcd(k+1,i)\)最多只有\(log\)种取值,因为每次变化至少会少一个质因子而不会增加质因子.故考虑二分变化点,这样其中的每一段区间中\(gcd\)是不变的,是一个常量,故\(f_{i,j}\)可以通过\(log\)次转移求出,总时间复杂度\(O(7nlogWlogn)\).

注:这种做法对于序列中值为0的情况是时间复杂度没有任何影响的,因为是区间\(gcd\)所以还是满足最多只有\(log\)种情况.(我写代码时还加了特判,特判还算错了)

code:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+15,mod = 998244353,SZ = 2.2e6+15;
int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);
}
int add(int a,int b){ return a+b < mod ? a+b : a+b-mod;}
int sub(int a,int b){ return a<b ? a+mod-b : a-b;}
int mul(int a,int b){ return 1ll*a*b%mod;}
char buf[SZ],*pp=buf-1;
int in(){while(*++pp<'-');int w = *pp&15;while(*++pp>'-') w = (w<<3)+(w<<1)+(*pp&15);return w;
}
int n,a[N],f[N][10],sum[N],g[N][10],st[N][25],lg[N];
int query(int l,int r){int s = lg[r-l+1];return gcd(st[l][s],st[r-(1<<s)+1][s]);
}
int find(int i,int x){int l = 1 , r = i , ret = 0;while(l<=r){int mid=(l+r)>>1;if(query(mid+1,x)==query(i+1,x)) r = mid-1 , ret = mid;else l = mid+1;}return ret;
}
int main(){fread(buf,1,SZ,stdin);n=in();for(int i = 2 ; i<=n ; i++) lg[i] = lg[i>>1]+1;for(int i = 1 ; i<=n ; i++) a[i]=in(),st[i][0]=a[i];for(int i = 1 ; i<=n ; i++) g[i][1]=1;for(int i = 2 ; i<=7 ; i++){for(int j = 1 ; j<=n ; j++){g[j][i]=add(g[j-1][i],g[j-1][i-1]);}}int logn = lg[n];for(int i = 1 ; i<=logn ; i++){for(int j = 1 ; j+(1<<i)-1<=n ; j++){st[j][i]=gcd(st[j][i-1],st[j+(1<<(i-1))][i-1]);}}for(int i = 1 ; i<=n ; i++) f[i][1] = query(1,i);for(int j = 2 ; j<=7 ; j++){for(int i = 1 ; i<=n ; i++) f[i][j] = add(f[i-1][j],f[i-1][j-1]) , sum[i]=add(sum[i-1],g[i][j-1]) ;for(int i = 1 ; i<=n ; i++){int k = i-1;while(k){int tmp = find(k,i);f[i][j] = add(f[i][j],mul(query(tmp+1,i),sub(sum[k],sum[tmp-1])));k = tmp-1;}}}int ans = 0;for(int i = 1 ; i<=n ; i++) ans = add(ans,f[i][7]);printf("%d",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink03-学习-套接字分词流自动写入工具 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[笔记]树论笔记+做题记录

树的性质树上任意两点间恰有一条简单路径。树上所有节点度数和为 \(O(n)\) 的。树上 \(m\) 个点两两产生的 LCA 去重后不超过 \(m-1\) 个。Proof:考虑找 LCA 的过程,两个点向上跳,重合时合并成一个点。最后剩下 \(1…

云服务器部署大数据组件

大数据集群规划hw101 hw102 hw103HDFS NameNodeDataNode DataNode SecondaryNameNodeDataNodeYARN NodeManager ResourceManagerNodeManager NodeManagerZookeeper QuorumPeerMain QuorumPeerMain QuorumPeerMainHive …

做a视频网站有哪些要制作自己的网站需要什么

目录 LNMP部署--nginx 搭建mysql数据库 安装mysql的过程&#xff1a; 部署PHP&#xff1a; ​编辑​编辑php的配置文件在哪 wordpress程序安装 LNMP部署--nginx 纯净--联网状态 环境变量中没有nginx 安装形式的选择&#xff1a; yum安装&#xff1a;自动下载安装包及…

wordpress金融网站模板正能量网站免费入口有限公司

华为云与伙伴共同打造联合解决方案 已成为更多企业的数字化转型利器 1月恒驰上云规划实施解决方案 完成上市宣讲并正式上架华为云官网 恒驰上云规划实施解决方案能力全景图&#xff1a;融合厂商云服务能力&#xff0c;一站式高效云迁移 从深入了解企业的本地IT环境、业务特点…

网页制作与网站建设技术大全 pdf公司形象vi设计

目录 一.基本查询回顾 二. 多表查询 三.自连接 四.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 一.基本查询回顾 准备数据库&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…

网课一

网课一下载安装了anaconda

购物网站开发分工都匀经济开发区建设局网站

今天小编为大家送上几条新闻了&#xff1a;1 微软给Edge浏览器添加离线小游戏谷歌浏览器在不联网的情况下&#xff0c;会有一个小恐龙跳一跳的游戏&#xff0c;而最近换上chromium内核的edge&#xff0c;也添加了自己的离线小游戏。这是一款冲浪游戏&#xff0c;非常类似于微软…

规模化网站SSL证书终极方案

对于拥有大量域名、子域名或需要频繁签发证书的企业和个人,单个购买商业证书成本极高,管理更是噩梦。最具性价比的方案核心在于:自动化 + 免费证书 + 集中管理。 一、 核心原则:为何这是最佳性价比方案? 成本为零…

极智项目 | 基于PyQT+Whisper实现的语音识别软件设计 - 指南

极智项目 | 基于PyQT+Whisper实现的语音识别软件设计 - 指南2025-10-08 17:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

详细介绍:saveOrUpdate 有个缺点,不会把值赋值为null,解决办法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

市场策划网站如何利用个人nas做网站

Unity 接入 Facebook SDK 的过程中遇到这个问题&#xff0c;查了很多帖子&#xff0c;不太直观&#xff0c;记录下来方便需要的同学参考 报上面错误的原因是在https://developers.facebook.com/apps/ 设置里没有填入有效的密钥 怎么填入这个密钥呢&#xff0c;其实很简单&…

国外网站顶部菜单设计谈谈网站建设会有哪些问题

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…

详细介绍:录制mp4

详细介绍:录制mp4pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Co…

网站联盟如何实现深圳定制网站公司

LeetCode 118 生成杨辉三角&#xff08;Pascal’s Triangle&#xff09; 小白渣翻译 给定一个非负整数 numRows&#xff0c;生成杨辉三角的前 numRows 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 例子 这里是小白理解 那么这种题目一上来看&#xf…

【OpenGL ES】光栅化插值原理和射线拾取原理

1 前言 ​ 最近在推导光栅化插值公式和射线拾取公式,发现计算过程中有很多共同点,因此将它们放在一篇文章里介绍。具体共同点如下。都引入了四面体模型 都以四面体的三条边作为基向量构建坐标系(非直角坐标系) …

网站移动端推广佛山网站建设熊掌号

只针对不正常的情况才使用异常 异常只应该被用于不正常的条件&#xff0c;它们永远不应该被用于正常的控制流。《阿里手册》中&#xff1a;【强制】Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理&#xff0c;比如&#xff1a;Nu…

网站建设职业描述郑州网站免费制作

概述&#xff1a; el-switch 表示两种相互对立的状态间的切换&#xff0c;多用于触发「开/关」。 常见用法&#xff1a; 1、绑定v-model到一个Boolean类型的变量。可以使用active-color属性与inactive-color属性来设置开关的背景色。 2、使用active-text属性与inactive-tex…

塑料机械怎么做网站网站建设协议 模板

尽管 Hexo 支持 MarkDown&#xff0c;但是我们却不能像写单独的 MarkDown 文档时那样肆无忌惮。由于我们所写的文档是需要被解析为静态网页文件的&#xff0c;所以我们必须严格遵从 Hexo 的规范&#xff0c;这样才能解析出条理清晰的静态网页文件。新建文档 假设我们的文章名为…

HTML 速查列表 - 教程

HTML 速查列表 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…