AcWing 2868. 子串分值(贡献法)

AcWing 2868. 子串分值

原题链接:https://www.acwing.com/problem/content/2871/

具体分析过程如下图:

直接遍历的话太麻烦,且时间复杂度太高,所以另寻他路
字符串中只有小写字母26个,所以可以从此着手, 考虑每个字母对答案的贡献度
那么枚举仅包含一个i的区间的左右端点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
char s[N];
//p[t]代表t字符当前所指向的位置 t -> [0, 25]
int l[N], r[N], p[26];  //l[]i, r[i]代表位置i的字符的前后一次出现的位置
int main() {
    scanf("%s", s + 1); //[1, n]
    int n = strlen(s + 1);
    //给左区间赋值
    for(int i = 0; i < 26; i++ )   p[i] = 0;      //将第0个位置设为i字符左极值
    for(int i = 1; i <= n; i++ ) {
        l[i] = p[s[i] - 'a'];   //i位置的t字符上次出现位置给l[i]
        p[s[i] - 'a'] = i;  //存下t字符此次出现的位置i,以方便下次赋值给l[]
    }  
    //给右区间赋值
    for(int i = 0; i < 26; i++ )    p[i] = n + 1;  //当前指向n+1位置,也就是在n+1位置设置哨兵
    for(int i = n; i >= 1; i--) {
        r[i] = p[s[i] - 'a'];
        p[s[i] - 'a'] = i;  //存下t字符此次出现的位置i,以方便赋值给r[]
    }
    LL res = 0;
    for(int i = 1; i <= n; i++) {
        res += (LL)(i - l[i]) * (r[i] - i);
    }
    cout << res;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netty中的PooledByteBuf池化原理剖析

PooledByteBuf PooledByteBuf是池化的ByteBuf&#xff0c;提高了内存分配与释放的速度&#xff0c;它本身是一个抽象泛型类&#xff0c; 有三个子类:PooledDirectByteBuf、PooledHeapByteBuf、PooledUnsafeDirectByteBuf. Jemalloc算法 Netty的PooledByteBuf采用与jemalloc一…

java在当前项目创建文件

public static void main(String[] arge) throws IOException {File file new File("dade02\\dade");//不存在创建if(!file.exists()){file.mkdirs();}File file1 new File("dade02\\dade\\daade.txt");file1.createNewFile();}或者 public static void …

Rust ?运算符 Rust读写txt文件

一、Rust &#xff1f;运算符 &#xff1f;运算符&#xff1a;传播错误的一种快捷方式。 如果Result是Ok&#xff1a;Ok中的值就是表达式的结果&#xff0c;然后继续执行程序。 如果Result是Err&#xff1a;Err就是整个函数的返回值&#xff0c;就像使用了return &#xff…

租用海外服务器,自己部署ChatGPT-Next-Web,实现ChatGPT聊天自由,还可以分享给朋友用

前言 如果有好几个人需要使用ChatGPT&#xff0c;又没有魔法上网环境&#xff0c;最好就是自己搭建一个海外的服务器环境&#xff0c;然后很多人就可以同时直接用了。 大概是情况是要花80元租一个一年的海外服务器&#xff0c;花15元租一个一年的域名&#xff0c;然后openai 的…

搜索专项---DFS之连通性模型

文章目录 迷宫红与黑 一、迷宫OJ链接 本题思路:DFS直接搜即可。 #include <iostream> #include <cstring> #include <algorithm>constexpr int N110;int n; char g[N][N]; bool st[N][N]; int x1, y1, x2, y2;int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, …

多线程完成文件拷贝:2024/2/21

作业1&#xff1a;使用多线程完成两个文件的拷贝 要求&#xff1a;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 代码&#xff1a; #include <myhead.h>//定义结构体 typedef struct Info {char *src;char *dest;int s…

springboot访问webapp下的jsp页面

一&#xff0c;项目结构。 这是我的项目结构&#xff0c;jsp页面放在WEB-INF下的page目录下面。 二&#xff0c;file--->Project Structure,确保这两个地方都是正确的&#xff0c;确保Source Roots下面有webapp这个目录&#xff08;正常来说&#xff0c;应该本来就有&#…

c语言经典测试题1

1.题1 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n"&#xff0c;x, y); return 0; } A: 5,7 B: 7,5 C: 3,8 D: 8,3 大家思考一下选哪一个呢&#xff1f; 我们来分析一下&#xff1a;上述代码中我们创建了4…

【JavaWeb】网上蛋糕商城-项目搭建

学习目标 了解网上蛋糕商城的项目需求 了解网上蛋糕商城的功能结构 熟悉E-R图和数据表的设计 熟悉项目环境的搭建 通过前面章节的学习&#xff0c;相信读者应该已经掌握了Web开发的基础知识&#xff0c;学习这些基础知识就是为开发Web网站奠定基础。如今&#xff0c;电子商…

golang JSON数据格式 XML数据格式 Gob(这玩意真的有人用吗?)

接着摸鱼&#xff0c;摸鱼一时爽&#xff0c;一直摸鱼一直爽&#xff0c;接着搞golang 不是所有的数据都可以编码为 JSON 类型&#xff0c;只有验证通过的数据结构才能被编码&#xff1a; JSON 对象只支持字符串类型的 key&#xff1b;要编码一个 Go map 类型&#xff0c;map 必…

stm32——hal库学习笔记(DAC)

这里写目录标题 一、DAC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是DAC&#xff1f;1.2&#xff0c;DAC的特性参数1.3&#xff0c;STM32各系列DAC的主要特性 二、DAC工作原理&#xff08;掌握&#xff09;2.1&#xff0c;DAC框图简介&#xff08;F1&#xff09;2.2…

Hive JDBC

Hive远程模式搭建好之后&#xff0c;可以使用Beeline客户端或JDBC远程访问Hive了 启动HiveServer2服务 $ hive --service hiveserver2 & 新建Java Maven项目&#xff0c;在pom.xml中添加以下依赖 <dependencies><dependency><groupId>jdk.tools</g…

曝光一下不发年终奖的企业

原文连接&#xff1a; 曝光一下不发年终奖的企业 今日热帖&#xff0c;看到网上发布的一篇帖子&#xff1a;请曝光一下不发年终奖的企业&#xff01; 结果留言上百条&#xff0c;除了私企&#xff0c;还有很多国企&#xff0c;银行等。而且还有一些我们认为应该很赚钱的企业&a…

opencv图像放缩与插值-resize函数

在OpenCV中&#xff0c;resize函数用于对图像进行尺寸调整&#xff08;放大或缩小&#xff09;&#xff0c;这个过程中通常需要用到插值方法来计算新尺寸下图像像素的值。插值方法对于放缩的质量有着直接影响。 void resize(InputArray src, OutputArray dst, Size dsize, dou…

Linux 性能分析工具汇总

Linux 性能分析工具汇总 出于对Linux操作系统的兴趣&#xff0c;以及对底层知识的强烈欲望&#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标&#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识&#xff0c;网络知识和操作系统知识…

k-邻近算法(kNN)

目录 k-近邻算法概述 k-近邻算法的一般流程 kNN算法伪代码 k-近邻算法概述 优点&#xff1a;精度高、对异常值不敏感、无数据输入假定 缺点&#xff1a;计算复杂度高、空间复杂度高 适用数据范围&#xff1a;数值型和标称型 k-近邻算法的一般流程 &#xff08;1&#x…

2024年最新1000个Java毕业设计选题参考

文章目录 2024年最新Java毕业设计选题参考一、Java毕业设计选题参考二、javaweb毕业设计选题三、springboot/ssm毕业设计选题参考 源码获取&#xff1a; 博主介绍&#xff1a;✌全网粉丝7W,CSDN博客专家、Java大数据领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/In…

强化学习(SAC)

SAC—— soft actor-critic SAC算法是一种现代的深度强化学习算法&#xff0c;它结合了基于策略的和基于价值的方法。SAC的核心思想是最大化期望回报的同时保持策略的随机性&#xff0c;这有助于提高探索环境的效率&#xff0c;并且通常可以赵高更好的策略。 发展史&#xff…

C++从入门到精通 第十四章(STL容器)【上】

写在前面&#xff1a; 本系列专栏主要介绍C的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程&#xff0c;笔者的原创部分主要在示例代码的注释部分。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C教材&#xff08;比…

接口自动化测试利器,使用Rest Assured进行REST API测试

我们在做接口测试时&#xff0c;一般在代码中会使用HttpClient&#xff0c;但是HttpClient相对来讲还是比较麻烦的&#xff0c;代码量也相对较多&#xff0c;对于新手而言上手会比较难一点&#xff0c;今天我们来看下另一个接口测试工具包REST Assured REST Assured是一个流行…