P10279 [USACO24OPEN] The Winning Gene S题解

news/2025/10/2 23:23:26/文章来源:https://www.cnblogs.com/2021hych/p/19124130

题目描述

给定一个长为 \(N\) 的字符串 \(S\),其中 \(1\le N\le 3000\)。对某个数对 \((K,L)\),其中 \(1\le L\le K\le N\),从 \(S\) 中取出所有 \(K\) 长度的子串,取出其所有长度为 \(L\) 的子串,将字典序最小的子串(如果存在并列则选择其中最左边的子串)在 \(S\) 中的起始位置 \(p_i\) 写入一个集合 \(P\)

对于 \(1 \ldots N\) 中的每一个 \(v\),求出满足 \(|P|=v\)\((K,L)\) 对的数量,时限为 \(2s\)

题目分析

数据规模提示我们用 \(n^2\) 级别的算法解决问题。如果暴力枚举 \((K,L)\),那么求解 \(|P|\) 的过程将至多只有 \(O(\log n)\) 的余地,这似乎是很困难的(需要及其强大的预处理)

因此,我们想到考虑枚举 \((K,L)\) 中的一个要素!如果枚举 \(K\),那么我要考虑的事情就是:所有 \(K\) 长度的子串要如何用 \(O(n)\)\(O(n \log n)\) 的复杂度统计出 \((K,1)\)\((K,K)\)\(|P|\)。既然不能枚举 \(L\),故只能考虑某个字串对哪些 \((K,L)\)\(|P|\) 有贡献,然而,似乎所有的字串都有可能贡献!这必然转化为枚举所有字串,总复杂度将达到 \(O(n^3)\)!

故而只能去枚举 \(L\),沿用同样的思路,枚举 \(L\) 的好处显而易见:可能贡献的字串长度必须为 \(L\)!我们考虑一个字串 \(S_{i,i+L-1}\)(表示从 \(i\) 位置开头长度为 \(L\) 的字串),其为某个 \(S_{l,r}\) 的所有长度为 \(L\) 的子串中字典序最小的子串(如果存在并列则为其中最左边的子串),那可想而知,\(l\)\(r\) 必然存在一个连续的范围,我们将这一连续的范围精确的表述出来:设

\[l_i=\max_{1 \le j <i,S_{j,j+L-1}<S_{i,i+L-1}}{j} \]

\[r_i=\min_{i < j \le n-L+1,S_{j,j+L-1}<S_{i,i+L-1}}{j} \]

上面的字符串比大小遵循题述的比较方式,则有 \(l\)\(r\) 的取值范围为:

\[l \in (l_i,i] \]

\[r \in [i+L-1,r_i+L-1) \]

从而对所有 \(K=r-l+1 \in [L,r_i-l_i+L-2]\)\(S_{i,i+L-1}\) 都可以贡献给 \((K,L)\)\(|P|\)。如果我们已经算出了 \(l_i,r_i\),那么利用差分和前缀和,就很轻松的解决这类区间修改单点查询的统计问题快速查询,对每一个 \(L\) 时间复杂度为 \(O(n)\)

最后的难点就在 \(l_i,r_i\) 的快速求解,注意到,\(l_i,r_i\) 中对 \(j\) 的选取遵循决策单调性(左/右侧第一个满足某种偏序关系的决策为其特征结构),因此我们考虑单调栈进行维护,此时对每一个 \(L\) 时间复杂度为 \(O(n)\),但是要求 \(O(1)\) 判断偏序关系,这是比较难的(\(\text{DP}\) 预处理可以做到)。当然,可以采用一种暴力的 \(O(\log n)\) 的查询方法。利用字符串哈希,二分找到第一个不一样的位置判断即可。

到此总的复杂度为 \(O(n^2 \log n)\),时限为 \(2s\),加上二分区间难以跑满 \(n\) 的规模,可以通过本题。

Code

点击查看代码
#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
const int N=3e3+10;
const int base=131;
int n,l[N],r[N],d[N],sum,ans[N];
int st[N],top;
string s;
ull f[N],p[N];
void H(int n) {p[0]=1;for(int i=1;i<=n;i++) {f[i]=f[i-1]*base+(s[i]-'A'+1);p[i]=p[i-1]*base;}
}
ull GH(int l,int r) {return f[r]-f[l-1]*p[r-l+1];
}
bool cmp(int x,int y,int L) {//[x,x+L-1] is or isn't < [y,y+l-1]if(GH(x,x+L-1)==GH(y,y+L-1)) {if(x<y) return true;return false;}int l=1,r=L,pos;while(l<=r) {int mid=l+r>>1;if(GH(x,x+mid-1)==GH(y,y+mid-1)) l=mid+1;else {pos=mid;r=mid-1;}}if(s[x+pos-1]<s[y+pos-1]) return true;return false;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>s;s=" "+s;H(n);for(int L=1;L<=n;L++) {for(int i=1;i<=n;i++) {l[i]=d[i]=0;r[i]=n-L+2;}top=0;for(int i=1;i<=n-L+1;i++) {while(top&&cmp(i,st[top],L)) top--;if(top) l[i]=st[top];st[++top]=i;}top=0;for(int i=n-L+1;i>=1;i--) {while(top&&cmp(i,st[top],L)) top--;if(top) r[i]=st[top];st[++top]=i;}for(int i=1;i<=n-L+1;i++) {d[L]++;d[r[i]-l[i]+L-1]--;}sum=0;for(int K=L;K<=n;K++) {sum+=d[K];ans[sum]++;}}for(int v=1;v<=n;v++) cout<<ans[v]<<endl;return 0;
}

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

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

相关文章

广州电商网站开发公司单页面 网站

简介&#xff1a; 7月8日&#xff0c;中文语言理解权威评测基准CLUE公开了中文小样本学习评测榜单最新结果&#xff0c;阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队&#xff0c;在大模型和无参数限制模型双赛道总成绩第一名&#xff0c;决赛答辩总成绩第一名。 作…

欧亚专线到国内多久网站东莞优化建设

利用示波器统计工具分析有噪声信号之测量统计和余晖图2019-09-24数字示波提供了多种基于统计的工具&#xff0c;除了前文提到的平均和直方图之外&#xff0c;测量参数统计和余晖图&#xff0c;也是非常有用的工具&#xff0c;协助快速获取有用信息。对于示波器测量参数&#xf…

网站制作方案怎么写wordpress微信付款插件

命令stat命令语法stat(选项)(参数)命令描述命令stat用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。命令选项-L&#xff1a;支持符号连接&#xff1b;-f&#xff1a;显示文件系统状态而非文件状态&#xff1b;-t&#xff1a;以简洁方式输出信息&#…

机构类网站有哪些网站建设辶金手指排名十五

博主个人小程序已经上线&#xff1a;【中二少年工具箱】 小程序二维如下&#xff1a; 正文开始 专栏简介专栏初衷 专栏简介 本系列文章由浅入深&#xff0c;从基础知识到实战开发&#xff0c;非常适合入门同学。 零基础读者也能成功由本系列文章入门&#xff0c;但如果您具…

从零搭建雷池WAF:环境配置、安装部署与Web防护实战

从零搭建雷池WAF:环境配置、安装部署与Web防护实战 在Web安全领域,WAF(Web应用防火墙)是抵御SQL注入、XSS、文件上传等攻击的关键防线。雷池(SafeLine)作为一款开源且易用的WAF工具,能有效保护Web服务安全。本文…

如何免费建设网站免费logo设计在线生成器官网

贴一篇源码分析的好文章&#xff1a;https://blog.csdn.net/qq_30905661/article/details/114400417 本质&#xff1a; 一个事务对应一个数据库连接。 通过 this 来调用某个带有 Transactional 注解的方法时&#xff0c;这个注解是失效的&#xff0c;可以看做这个方法&#x…

让别人做网站需要提供什么企业黄页网站源码

前言&#xff1a;当设计师通过photoshop工具设计完设计稿导出psd文件时&#xff0c;我们前端工程师该如何进行切图转换成网页的所需的图片呢&#xff0c;接下来讲讲如何利用photoshop工具快速简洁的切图&#xff0c;因为ps工具用到的行业很多&#xff0c;涉及到的各个行业&…

使用Java将Word文件转换为PNG图片 - 指南

使用Java将Word文件转换为PNG图片 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

论文速读记录 | 2025.10

2025.10 | 速读文章纪录目录Horizon Generalization in Reinforcement LearningHIQL: Offline Goal-Conditioned RL with Latent States as ActionsContrastive Preference Learning: Learning from Human Feedback wi…

【Rust GUI开发入门】编写一个本地音乐播放器(15. 记录运行日志) - Jordan

本系列教程对应的代码已开源在 Github zeedle 本篇文章介绍如何将音乐播放器的运行情况持久化记录到日志文件中,这对分析程序意外情况出现的原因很有帮助! 使用最常用的env_logger,将其添加到Cargo.toml中: env_lo…

成都网站建设 3ewordpress简单投稿

在现代社会中&#xff0c;电力是我们生活和工作不可或缺的一部分。大楼宾馆作为城市中繁忙生活的一部分&#xff0c;依赖于可靠的电力供应来支持各种设施和服务&#xff0c;从客房照明到电梯运行&#xff0c;无一不离电。然而&#xff0c;大楼宾馆电力分配系统的稳定性和安全性…

6 种常见 AI 编程协作便捷的方法总结

6 种常见 AI 编程协作便捷的方法总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

可以做产品推广的网站flash网站整站下载

目录 1.1 关于版本控制 1.1.1 本地版本控制 1.1.2 集中化的版本控制系统 1.1.3 分布式版本控制系统 1.2 Git简介 1.2.1 Git历史 1.3 安装git 1.3.1 环境说明 1.3.2 Yum安装Git 1.3.3 编译安装 1.4 初次运行 Git 前的配置 1.4.1 配置git 1.4.2 获取帮助 1.5 获取 G…

DeploySharp开源发布:让C#部署深度学习模型更加简单

DeploySharp:面向C#开发者的跨平台模型部署框架 DeploySharp是一款专为C#开发者设计的深度学习模型部署框架,支持OpenVINO和ONNX Runtime推理引擎,兼容YOLOv5-v12全系列模型以及Anomalib等主流模型。该框架采用模块…

光伏电站建设的国家网站湖南网站托管

java之NIO 1 什么是NIO Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO的三大核心部分&#xff1a;通道(Channel)&#xff0c;缓冲区(Buffer), 选择器(Selector)&#xff0c;数据总是从…

视频多的网站建设如何建设一个静态网站

什么是柔性数组 什么是柔性数组&#xff1f;柔性数组其实也是动态内存管理部分的内容。这节主要来复习柔性数组的知识点。 当结构体的最后一个成员为数组&#xff0c; 且这个数组的大小未确定时&#xff0c; 我们就称它是柔性数组。 如&#xff1a; struct stu{char name[…

泰康人寿保险官方网站专题学习网站模板

boot读取配置文件1. yml配置文件2. 绑定方式13. 绑定方式23.1 依赖.3.2 boot 中提供的属性装配功能。1. 在某些业务中&#xff0c;需要将类的配置写到配置文件中, 不在代码中写死配置。 2. 所以需要读取配置文件(yaml, properties) 读取到Java Bean中。 3. 本文以oss对象存储配…

别样的国庆作业大战

一天,文科给我(理科)打来电话。他说:“你敢不敢和我举行假期作业量大战?”我豪爽的答应了:“我当然敢!我有 \(10^{12180211} \operatorname{mol}\) 试卷!2025.10.1 在 XXX 中高一年级举行,谁不来谁就是怂货。…

淘宝网站的建设目的是什么意思长沙网站托管seo优化公司

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 1、目前市面上的加密的方式 对称式加密&#xff1a;DES&#xff0c;AES&#xff0c;Base64加密算法 非对称加密&#xff1a…

摄影网站设计思想宁波优质网站制作哪家好

linux 常用的帮助命令 1.help -相当于man的简化版 例如&#xff1a;vim –help 2.man: 详细介绍vim的用法 例如&#xff1a;man vim 3.info:偏重介绍文档 例如&#xff1a; info vim