首页 > 其他分享 >做题笔记(二)

做题笔记(二)

时间:2024-08-08 21:54:35浏览次数:16  
标签:2000005 last int text 笔记 cdots low

[CSP-S 2023] 消消乐

题目传送门

[CSP-S 2023] 消消乐

思路

考虑 DP。

显然,设 \(f_i\) 表示以位置 \(i\) 结尾的可消除序列的个数,我们对每一个可消除序列考虑模型,大概就是这个样子:\(\text{a}\cdots\text{ab}\cdots\text{b}\)。

那么我们当前位置为 \(i\),前一个可以与 \(i\) 匹配的最大的下标为 \(low_i\),显然:

\[f_i=f_{low_i-1}+1 \]

到这里其实都很简单的,去年的我考场上也是想到这里就戛然而止,最后写了一个 50pts 的暴力遗憾离场。

但我们可以考虑一个一个往前找,就是那个 \(O(n^2)\) 的暴力做法,考虑优化。

假设当前位置为 \(i\),\(low_{1\rightarrow i}\) 已经求出,那么我们注意到类似于 \(\text{a}\cdots\text{a}\) 的子串中的省略号一定是由若干个可消除字串。那么我们可以一个一个往前跳。

由于最多只有 \(26\) 个字母,所以每一次向前跳的期望应该是一个常数级别,所以时间复杂度是线性的。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;

string s;
int f[2000005]={0},n,ans=0;
int last[2000005]={0};

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	
	cin>>n>>s; s=" "+s;
	
	for(int i=1;i<=n;i++){
		for(int j=i-1;j>0;j=last[j]-1){
			if(s[i]==s[j]){
				last[i]=j;
				break;
			}
		}
		
		if(last[i]!=0)
			f[i]+=(1ll+f[last[i]-1]);
	}
	
	for(int i=1;i<=n;i++)
		ans+=f[i];
		
	cout<<ans<<endl;
	
	return 0;
}

标签:2000005,last,int,text,笔记,cdots,low
From: https://www.cnblogs.com/snapyust/p/18349817

相关文章

  • 最大流学习笔记(待补充)
    刚学了最大流的EK算法和Dinic算法,在此做一点总结。由于这次专题学习是偏向图论建模的,因此目前暂且不涉及算法本身。Dinic板子:namespaceNet{ intS,T; inthead[510],work[510],etot=1; structnode{intnxt,v,cap;}edge[160010]; inlinevoidadd(intx,inty,in......
  • freertos学习笔记(十)事件标志组
    事件标志组相当于用户平时定义的Flag,事件标志,不过freertos支持将该标志组作为启动task的条件概述分为8位和24位的模式(通过设置宏来配置)每一位有0和1两个状态用法用于平常程序的标记位用于task之间的同步任务a先到达同步点,进入阻塞态设置任务a的事件标记位检查其......
  • br4gOnB4ll靶机笔记
    br4gOnB4ll靶机笔记这是一台vulnhub上的免费靶机,比较简单。1、主机发现主机发现-sn只做ping扫描,不做端口扫描nmap-sn192.168.84.1/24StartingNmap7.93(https://nmap.org)at2024-07-0707:37EDTNmapscanreportfor192.168.84.1Hostisup(0.00045slatenc......
  • BossPlayersCTF靶机笔记
    BossPlayersCTF靶机靶机概述这是vulnhub上的一个简单的linux靶机,适合初级渗透测试人员,同时也告诉我们在渗透测试过程中要有耐心,要允许有兔子洞。靶机整体思路:主机端口探测,发现web服务。在web服务中进行信息收集,发现命令注入,反弹shell利用SUID进行提权,拿到rootflag靶机下......
  • 知攻善防Web1应急靶机笔记--详解
    知攻善防Web1应急靶机笔记概述这是一台知攻善防实验室的应急响应靶机,方便大家练习一下应急响应的流程和操作。靶机的前景概述:前景需要:小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件:1.攻击者的shell密......
  • Redis学习笔记_1_基本安装与使用
    Redis入门篇1初识RedisRedis是一种键值型的NoSql数据库键值型:指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至jsonNoSql:相对于传统关系型数据库而言,有较大差异1.1认识NoSQLNoSql可以翻译做NotOnlySql(不仅仅是SQL......
  • 微信小程序笔记完整总结,带你零基础速成微信小程序2.0
      ......
  • bitset 学习笔记
    bitset有点厉害,必须要学了。介绍bitset可以看成是一个每个位置都是\(0\)或\(1\)的bool数组。与bool数组相比,它的空间复杂度是其\(\frac{1}{32}\),时间复杂度也是\(\frac{1}{32}\),还支持位运算,所以不论是用处还是效率基本薄纱了bool数组。可以作为卡常、压位操作、......
  • 鹏哥C语言自定义笔记重点
    1.浮点数在内存中不能精确保存。2.sizeof这个操作符计算返回的结果是size_t类型的,是无符号整数型的,当遇见负数会被认为是非常大的数。3.strcpy在拷贝字符串时,会把源字符串中的\0也拷贝过去。assert是断言,可以防止NULL,需要头文件#include<assert.h>。const修饰指针变量放在*......
  • 大语言模型学习笔记
    基础知识简介一、大语言模型(LLM)的概念LLM定义与特点:处理海量文本,多者可具备数百亿参数,理解语言深度,展现涌现能力。LLM国内外代表:i.国外有GPT系列、LLaMA等ii.国内有文心一言、通义千问等。模型大小与性能能关系:与小模型构架相似,但参数量级提升带来解决复杂任务的显著优......