当前位置: 首页 > news >正文

【做题记录】P9753 [CSP-S 2023] 消消乐

题目链接

这道题状态设计十分巧妙。

直接转移显然不切实际。我们不妨“消消乐”的性质入手:

如果区间 \([i,j],[j+1,k]\) 都是可消除的,那么 \([i,k]\) 一定也是可消除的。根据此性质,我们设置辅助数组 \(g\) 维护当前字符可以和之前那个字符形成区间并且区间是可消除的。

具体步骤如下:

  • 我们从 \(j=i-1\) 开始,一直往前跳 \(j=g_j -1\),这样如果遇到有一个位置 \(s_j=s_i\) 的话,新的 \(g_i\) 就是 \(j\) 了。

状态的转移:\(f_i=f_{g_i-1}+1\)

最终答案:\(\sum_{i=1}^n f_i\)

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N(2e6+5);
int n,g[N];
ll f[N],ans;
string s;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>s;for(int i(1);i<=n;++i){for(int j(i-1);j>0;j=g[j]-1){if(s[j-1]==s[i-1]){g[i]=j;break;}}if(g[i])f[i]=f[g[i]-1]+1,ans+=f[i];}cout<<ans;return 0;
}
http://www.jsqmd.com/news/16118/

相关文章:

  • [Linux] homebrew MacOS和Linux下的软件管理工具
  • nas webdav 挂载盘Git报错:fatal: detected dubious ownership in repository at - 何苦
  • 南京icpc-c题:
  • 学生信息管理系统(DAO模式重构)项目报告
  • 思科公司分析
  • 开源嵌入模型对比:让你的RAG检索又快又准
  • C++lambda表达式简单笔记
  • 智慧城市基础设施漏洞分析与国家安全影响
  • ️ PostgreSQL 数据类型
  • CSP-J/S 2025 第一轮游记
  • 【汇编和指令集 . 第2025 .10期】万般皆为投影
  • 小作业 12
  • Python 潮流周刊#123:你可能不需要单例模式
  • 一位焦虑的普通二本软件工程的学生
  • C++类的运算符重载
  • CSP-S模拟34/2025多校冲刺CSP模拟赛6
  • Java学习通互评5
  • 运筹学在供应链优化中的实际应用
  • WebGL学习及项目实战(第03期:绘制多个点,线,面)
  • ozon定制尺寸和重量
  • CF 359D. Pair of Numbers
  • 2025多校CSP模拟赛6
  • godot3D节点本身的偏转数值错误竟会导致空间移动穿模??!
  • Kafka面试精讲 Day 24:Spring Kafka构建实战
  • 重新安装trea cn
  • 题解:qoj7938 Graph Race
  • java中的初等函数
  • 【机器人】SG-Nav 分层思维链H-CoT | 在线分层3D场景图 | 目标导航 - 教程
  • 专用硬件神经网络优化技术解析