P8715 [蓝桥杯 2020 省 AB2] 子串分值

一、题目描述

P8715 [蓝桥杯 2020 省 AB2] 子串分值

二、问题简析

记录字符串 s s s 的 第 i i i 个字符 s i s_i si 0 ≤ i < s . s i z e 0\leq i<s.size 0i<s.size)上一次出现的位置 p r e i pre_i prei、下一次出现的位置 n e x i nex_i nexi,仅包含 s i s_i si 的字串个数为 ( i − ( p r e i + 1 ) + 1 ) ∗ ( n e x i − 1 − i + 1 ) (i - (pre_i + 1) + 1) * (nex_i - 1 - i + 1) (i(prei+1)+1)(nexi1i+1),即 ( i − p r e i ) ∗ ( n e x i − i ) (i-pre_i)*(nex_i-i) (iprei)(nexii)。只需要遍历所有的 s i s_i si,将所有字串个数相加就是所求。

p r e i pre_i prei:因为字符串里只有 26 26 26 个小写字母,所以创建一个容量为 26 26 26 的临时数组 rec[26],记录对应字母上次出现的下标rec[0] 对应 arec[1] 对应 b,以此类推)。

  • 1、因为要记录上一次出现的位置,所以要从左往右遍历,并更新相应的 rec[i]
  • 2、需要注意每个字母首次出现的 p r e i pre_i prei,因为是首次出现,所以下标从 0 0 0 i i i 的字母都可以是字串的开头,即 p r e i + 1 = = 0 pre_i+1==0 prei+1==0。因此,rec[26] 要初始化为 -1

n e x i nex_i nexi:与 p r e i pre_i prei 类似,也需要一个临时数组 rec[26]。不同点:

  • 1、从右往左遍历,并更新相应字母的下标
  • 2、rec[26] 初始化为 s.size,因为每个字母最后一次出现时,下标从 i i i s . s i z e − 1 s.size-1 s.size1 都可以作为字串的结尾,即 n e x i − 1 = = s . s i z e − 1 nex_i-1==s.size-1 nexi1==s.size1

三、AC代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;const int MAX = 1e5 + 3;
int pre[MAX], nex[MAX], rec[30];
string s;int main()
{#ifdef LOCALfreopen("test.in", "r", stdin);#endifcin >> s;int sSize = s.size();fill(rec, rec + 26, -1);for (int i = 0; i < sSize; i++){pre[i] = rec[s[i] - 'a'];rec[s[i] - 'a'] = i;}fill(rec, rec + 26, sSize);for (int i = sSize - 1; i >= 0; i--){nex[i] = rec[s[i] - 'a'];rec[s[i] - 'a'] = i;}ll ans = 0;for (int i = 0; i < sSize; i++){ans += (i - pre[i]) * (nex[i] - i);}cout << ans << endl;return 0;
}

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

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

相关文章

模型部署实战:从训练到上线

目录 1.前言 2.RESTful API设计 3.使用Flask/Django开发后端服务 4.使用TensorFlow Serving部署模型 5.性能监控与服务维护要点 6.总结 1.前言 在机器学习的全周期中&#xff0c;模型部署是至关重要的一环。经过长时间的训练、验证和优化&#xff0c;当模型准备就绪时&am…

【Leetcode】top 100 栈

基础知识补充 1.栈是一种运算受限的线性表&#xff0c;仅允许在一端进行插入和删除操作&#xff1b; 2.可用列表实现&#xff0c;list.append(val) // list.pop() 题目 20 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的…

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…

如何在ArcGIS中查看栅格数据的值类型(整数或浮点数)

在 ArcGIS 中查看栅格数据的值类型&#xff08;整数或浮点数&#xff09;&#xff0c;您可以按照以下步骤操作&#xff1a; 1. **点击栅格单元格**&#xff1a; - 使用“信息”工具&#xff08;Identify Tool&#xff0c;通常是一个带放大镜和一个字母 i 的图标&#xff09…

python--os和os.path模块

>>> import os >>> #curdir #获取当前脚本的绝对路径 >>> os.curdir . >>> import os.path >>> #获取绝对路径 >>> os.path.abspath(os.curdir) C:\\Users\\GUOGUO>>> #chdir #修改当前目录 >&g…

JAVA面试大全之数据库篇

目录 1、原理和SQL 1.1、什么是事务?事务基本特性ACID? 1.2、数据库中并发一致性问题? 1.3、事务的隔离等级? 1.4、ACID靠什么保证的呢?

创建一个vue3 + ts + vite 项目

vite 官网&#xff1a; https://cn.vitejs.dev/guide/ 兼容性注意 Vite 需要 Node.js 版本 18&#xff0c;20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 安装项目 1. 使用n…

Linux:TCP协议的三次握手和四次挥手

文章目录 三次握手四次挥手为什么要进行三次握手&#xff1f;三次握手也不安全 本篇解析的主要是TCP的三次握手和四次挥手的过程 三次握手 如图所示&#xff0c;在TCP要进行链接的时候&#xff0c;其实是要进行三次握手的 第一次握手是指&#xff0c;此时客户端要给服务器发送…

【Qt】QMainWindow

目录 一、概念 二、菜单栏 2.1 创建菜单栏 2.2 在菜单栏中添加菜单 2.3 创建菜单项 2.4 在菜单项之间添加分割线 三、工具栏 3.1 创建工具栏 3.2 设置停靠位置 3.3 设置浮动属性 3.4 设置移动属性 四、状态栏 4.1 状态栏的创建 4.2 显示实时消息 4.3 显示永久消…

Vue性能优化--gZip

一、gZip简单介绍 1.1 什么是gzip gzip是GNUzip的缩写&#xff0c;最早用于UNIX系统的文件压缩。HTTP协议上的gzip编码是一种用来改进web应用程序性能的技术&#xff0c;web服务器和客户端&#xff08;浏览器&#xff09;必须共同支持gzip。目前主流的浏览器&#xff0c;Chro…

【并发】第二篇 ThreadLocal详解

导航 一. ThreadLocal 简介二. ThreadLocal 源码解析1. get2. set3 .remove4. initialValue三. ThreadLocalMap 源码分析1. 构造方法2. getEntry()3. set()4. resize()5. expungeStaleEntries()6. cleanSomeSlots()7. nextIndex()8. remove()9. 总结ThreadLocalMap四. 内存泄漏…

python习题小练习(挑战全对)

1. (单选题)Python 3.0版本正式发布的时间&#xff1f; A. 1991B. 2000C. 2008D. 1989 2. (单选题)以下关于Python语言中“缩进”说法正确的是&#xff1a; A. 缩进在程序中长度统一且强制使用B. 缩进是非强制的&#xff0c;仅为了提高代码可读性C. 缩进可以用在任何语句之后…

超文本传输协议HTTP

HTTP协议 在网络通信中&#xff0c;我们可以自己进行定制协议&#xff0c;但是也有许多已经十分成熟的应用层协议&#xff0c;比如我们下面说的HTTP协议。 HTTP协议简介 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;协议又叫做超文本传输协议&#xff0c;是一…

带你学习现代C++并发编程

通过对C并发编程的理解&#xff0c;我总结了相关的文档&#xff0c;有需要的可以关注我公众号&#xff0c;并给我留言&#xff01; 这是目录

专升本-现代通信技术5G

现代通信技术 什么是通信&#xff1a; 人与人&#xff0c;人与自然之间通过某种行为或者媒体介质进行信息交流和传递 通信的基本要素&#xff1a; 信源 ----信道&#xff08;噪音-干扰&#xff09;-----信宿 通信技术是什么&#xff1f; 研究从信息的源头到信息的目的地整…

Cookie/Session

1.Cookie HTTP 协议自身是属于 "无状态" 协议. "无状态" 的含义指的是: 默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系. 但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后, 第二…

创建数据库管理账户以及授权

一、创建数据酷管理账户命令 为了保障数据库系统的安全性&#xff0c;以及让 其他用户协同管理数据库&#xff0c;可以在MariaDB数据库管理系统中为他们创建多个专用的数据库管理账户&#xff0c;然后再分配合理的权限&#xff0c;以满足他们的工作需求. 使用root管理员 登录…

机器学习模型——SVM(支持向量机)

基本概念&#xff1a; Support Vector Machine &#xff08;支持向量机&#xff09;: 支持向量&#xff1a;支持或支撑平面上把两类类别划分开来的超平面的向量点。 机&#xff1a;一个算法 SVM是基于统计学习理论的一种机器学习方法。简单地说&#xff0c;就是将数据单元…

自定义类型(二)结构体位段,联合体,枚举

这周一时兴起&#xff0c;想写两篇文章来拿个卷吧&#xff0c;今天也是又来写一篇博客了&#xff0c;也是该结束自定义类型的学习与巩固了。 常常会回顾努力的自己&#xff0c;所以要给自己的努力留下足迹。 为今天努力的自己打个卡&#xff0c;留个痕迹吧 2024.03.30 小闭…