牛客 第二十届西南科技大学ACM程序设计竞赛(同步赛):祖玛


 

题目描述

wzy 在玩一种很新的祖玛。

给定一个仅包含 小写字母 的字符串 sss , sss 由 mmm 个不同的小写字母组成,每个字母代表一种小球,在消去时会获得 相应 的分数:


  • 两个及以上 相同的小球相碰就会消失(在发射小球前因为无相碰,所以有两个及以上小球相邻也不会消失)。
  • 每次碰撞后,消失获得的分数为:对应小球分数×消失个数

     

你可以进行 一次 操作:

发射一个任意小球于 sss 的任意位置(也可以是 头和尾 )。

发射小球后,按照规则进行,直到不能碰撞为止。

请你求出经过一次操作后取得的 最大分数

输入描述:

 

第一行包含两个整数 n,m(1≤n≤105,1≤m≤26)n,m(1\le n \le 10^5,1\le m\le 26)n,m(1≤n≤105,1≤m≤26) - 表示字符串长度 和 字符集大小。

第二行包含一个长度为 nnn 字符串 sss。

接下来 mmm 行,每行包含 c,k(′a′≤c≤c,k('a'\le c\lec,k(′a′≤c≤ ′z′,1≤k≤109)'z',1\le k\le10^9)′z′,1≤k≤109) - 表示每消除一个字母 ccc 有 kkk 分。

保证:字符串 sss 中的字母必定在给定字符集中出现。

输出描述:

输出一次操作能获得的最高得分。

示例1

输入

复制6 3 abccba a 1 b 2 c 3

6 3
abccba
a 1
b 2
c 3

输出

复制15

15

说明

样例一的解释:

最终将全部字母消除,得分为 3×3+2×2+2×1=153×3+2×2+2×1 = 153×3+2×2+2×1=15 即为最大
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s,s2;
long long score[30];
long long ans;
int p[300010];
long long pre[100010];
void mlc(){int mid,mr=0;for(int i=1;i<s2.size();i++){if(i<mr) p[i]=min(p[mid*2-i],mr-i);else p[i]=1;while(s2[i-p[i]]==s2[i+p[i]]) p[i]++;if(i+p[i]>mr){mr=i+p[i];mid=i;}}
}
int main(){scanf("%d%d",&n,&m);cin>>s;for(int i=1;i<=m;i++){char c;long long num;cin>>c;scanf("%lld",&num);score[c-'a']=num;}s2+='&';s2+=s[0];pre[1]=score[s2[1]-'a'];for(int i=1,j=1;i<s.size();i++){if(s[i]!=s[i-1]) {s2+=s[i];j++;pre[j]=pre[j-1]+score[s[i]-'a'];//s2的前缀和}else{pre[j]+=score[s[i]-'a'];}}s2+='^';
//将s中连续出现的某个字母合并成只有一个,最终形成s2,这样的s2的回文串只能为奇数,因此直接头和尾加一个不同的字符即可,不用再加‘#’mlc();for(int i=1;i<s2.size();i++){long long res;res=pre[i+p[i]-1]-pre[i-p[i]]+score[s2[i]-'a']; //以i为中心,左右分别延长p[i]-1的回文串ans=max(ans,res);}cout<<ans;
}

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

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

相关文章

dead--栈队列

创建链表 分别用头插法和尾插法创建并输出带附加头结点的单链表。 头插法是指每个新元素都插入到链表的最前面&#xff0c;即头结点和链表第一个元素之间&#xff1b; 尾插法指的是每个新元素都插入到链表的最后面。 输入描述 输入&#xff1a;一组整数&#xff0c;以EOF为结束…

ffmpeg解封装rtsp并录制视频-(2)使用VLC模拟一个rtsp服务器并用ffmpeg解封装该rtsp流

VCL模拟服务器并打开播放该视频文件&#xff1a; - 准备好一个mp4文件&#xff0c;打开vlc软件 - 选择“媒体”》“流” - 添加一个mp4文件 - 点击下方按钮选择“串流” - 下一步目标选择rtsp 点击“添加” - 端口默认8554 - 路径设置 /test - 用…

代码随想录算法训练营Day37|56.合并区间、738.单调递增的数字、968.监控二叉树

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 和之前的思路类似&#xff0c;先创建一个ans二维数组&#xff0c;创建start和end来指明添加进入ans数组的区间下标&#xff0c;先对数组按照首元素排序从小到大排序后&#xff0c;根据当前元素是否小于下一个元…

【three.js】自定义物体形状BufferGeometry

目录 一、认识缓冲类型几何体BufferGeometry 二、将各个顶点连线 一、认识缓冲类型几何体BufferGeometry threejs的长方体BoxGeometry、球体SphereGeometry等几何体都是基于BoxGeometry类构建的,BufferGeometry是一个没有任何形状的空几何体,你可以通过BufferGeometry自定…

SinNerf理解和效果

文章目录 SinNerf 解决的问题方法和结构自己训练的效果 SinNerf 解决的问题 该方法主要解决的问题是&#xff1a; 现有都使用多张照片来进行nerf 表示的学习&#xff0c;这篇文章的话&#xff0c;主要是想使用一张单视角的照片来Nerf表示的学习。通过从单张照片中得到的伪标签…

【SpringBoot集成Spring Security】

一、前言 Spring Security 和 Apache Shiro 都是安全框架&#xff0c;为Java应用程序提供身份认证和授权。 二者区别 Spring Security&#xff1a;重量级安全框架Apache Shiro&#xff1a;轻量级安全框架 关于shiro的权限认证与授权可参考小编的另外一篇文章 &#xff1a; …

IDEA模版快速生成Java方法体

新建模版组myLive 在模版组下新建模版finit 在模版text内输入以下脚本 LOGGER.info("$className$.$methodName$>$parmas1$", $parmas2$); try {} catch (Exception e) {LOGGER.error("$className$.$methodName$>error:", e); }LOGGER.info("$c…

win10没有Hyper-v的解决方法

win10没有Hyper-v的解决方法 问题&#xff1a;最近想装下docker&#xff0c;但是在控制面板-程序-启用或关闭Windows功能下找不到Hyper-v节点。 废话不多说&#xff0c;直接上实操教程 1.将下面命令复制到文本文档中&#xff0c;并将文档重命名Hyper.cmd pushd "%~dp0&q…

实用小工具-python esmre库实现word查找

python esmre库实现word查找 前言&#xff1a; 在文本中匹配特定的字符串&#xff0c;一般可以用普通的字符串匹配算法&#xff0c;KMP算法&#xff1b; python中提供了一个库&#xff0c;esmre, 通过预先将字符串存到esm对象中&#xff0c;利用这些字符串从候选的字符串中进行…

Spring Boot实战:图书信息网站

实战概述&#xff1a;Spring Boot图书信息网站开发 项目背景 随着数字化时代的到来&#xff0c;图书信息网站为用户提供了一个便捷的在线浏览和购买图书的平台。本实战项目旨在通过Spring Boot框架开发一个图书信息网站&#xff0c;实现图书展示、用户登录和管理等功能。 项…

【Bazel 】- Examples to build C++ code

Examples to build C code This folder is part of the C Bazel Tutorial, found at https://bazel.build/start/cpp This package will showcase how to build C code in stages. 此文件夹是 C Bazel 教程的一部分&#xff0c;位于 https://bazel.build/start/cpp 此包将展…

Android 自定义View

我们所有的试图都是起源于自定义View&#xff0c;包括ViewGroup也是继承于它&#xff0c;可以说它是视图组件之父。 我们可以从它的大致流程来分为四个部分&#xff1a; 构造方法&#xff0c;onMeasure&#xff0c;onLayout&#xff0c;onDraw 构造方法&#xff1a; 它主要有…

如何判断一个js对象是否存在循环引用

一、背景 在前端JSON.stringfy是我们常用的一个方法&#xff0c;可以将一个对象序列化。 例如将如下对象序列化 const person { name: kalory, age:18}JSON.stringfy(person) // 结果 {"name":"kalory","age":18}将一个数组序列化const arr …

什么是分布式光伏系统?

随着全球对可再生能源和环保技术的日益重视&#xff0c;分布式光伏系统已成为电力领域中不可或缺的一部分。它代表了一种新兴的能源供应方式&#xff0c;具有显著的环保和经济价值。 一、定义与特点 分布式光伏系统是指将光伏组件安装在用户侧&#xff0c;如屋顶、墙面等建筑物…

OperationalError: (_mysql_exceptions.OperationalError)

OperationalError: (_mysql_exceptions.OperationalError) (2006, MySQL server has gone away) 这个错误通常表示客户端(例如你的 Python 程序使用 SQLAlchemy 连接到 MySQL 数据库)和 MySQL 服务器之间的连接被异常关闭了。这个问题可能由多种原因引起,以下是一些常见的原…

ModuleNotFoundError: No module named ‘distutils‘的解决办法

最近想试试odoo17&#xff0c;在windows环境下&#xff0c;想安装试验一下&#xff0c;结果老出现oduleNotFoundError: No module named ‘distutils‘错误。查了一下&#xff0c;以为是python版本导致的&#xff0c;结果试了很多版本如下&#xff1a; 试了几个&#xff0c;每个…

Java——变量作用域和生命周期

一、作用域 1、作用域简介 在Java中&#xff0c;作用域&#xff08;Scope&#xff09;指的是变量、方法和类在代码中的可见性和生命周期。理解作用域有助于编写更清晰、更高效的代码。 2、作用域 块作用域&#xff08;Block Scope&#xff09;&#xff1a; 块作用域是指在…

windows设备/路由设备上ip地址如何查看、使用

在Windows设备上查看本地IP地址&#xff08;IPv4和IPv6&#xff09;&#xff1a; 使用命令提示符&#xff1a; 打开命令提示符&#xff08;在Windows中按Win R&#xff0c;然后输入"cmd"并按Enter&#xff09;。在命令提示符窗口中&#xff0c;输入以下命令以查看…

Redis缓存穿透、缓存雪崩和缓存击穿的解决方案

Redis缓存穿透、缓存雪崩和缓存击穿的解决方案 引言 Redis作为当前非常流行的内存数据结构存储系统&#xff0c;以其高性能和灵活性被广泛应用于缓存、消息队列、排行榜等多种场景。然而&#xff0c;在实际使用过程中&#xff0c;可能会遇到缓存穿透、缓存雪崩和缓存击穿等问…

软件服务中的 SLA 到底是什么?

目录 什么是 SLA SLA 的组成部分 SLA 的重要性 制定和执行 SLA 小结 平常使用云服务或者使用 SaaS 服务时&#xff0c;厂商一般都会承诺 SLA 达到多少&#xff0c;没有达到的话会如何赔偿&#xff0c;例如云服务的稳定性一般会承诺4个9&#xff08;即99.99%&#xff09;。…