首页 > 其他分享 >P9753 [CSP-S 2023] 消消乐

P9753 [CSP-S 2023] 消消乐

时间:2024-04-16 22:34:44浏览次数:21  
标签:队尾 cnt hash P9753 int rep 2023 now CSP

好题,该说不说想了半天manacher结果是假的

题目链接:P9753 [CSP-S 2023] 消消乐


回归正题对于这道题我们应该怎么做呢?

难点其实是在于我们如何在 O(1) 的时间内判断该字符是否符合

于是呢我们稍稍的思考一下就可以得到一个事实:

xAAx xx AxxA......

形如这样的字符串呢一定是合法的

那么对于此题我们考虑用hash和队列来做

首先我们根据以下依据记录hash值

记当前队列里总的hash值为now

那么当进来一个字符时,我们先将它与队尾字符进行比较

如果相等,那么我们就先将now-=hash(队尾元素),并将队尾元素弹出

否则我们就将当前元素加入队尾,并将now+=hash(当前队尾元素)

最后我们看看当前now在以往出现过几次,为什么呢???

很好理解,如果当前的now在之前出现过,就说明它与之前使总hash值变为now的字符相等,那么要想它们相等的话,它们之间的元素一定被消掉了否则根据我们的计算的话,它们会因为未消掉的元素而不相等

因此我们的ans+=cnt(now),并令cnt(now)++

代码如下

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define int long long
const int N=2e6+10,P=131,mod=8942221889969,Mod=1e9+7;

int n;
int ans;

map<int,int> cnt;

int p[N];
char s[N];

deque<int>q;

int _hash_(int x,int len)
{
	return x*p[len]%mod;//计算hash值 
}

int now_hash(int x,int opt)
{
	//计算当前的H 
	return (opt==1)?(x-_hash_(q.back(),q.size()))
					:(x+_hash_(q.back(),q.size()));
}

void solve()
{
	int H=0;
	cnt[0]=1;
	rep(i,1,n)
	{
		//cout<<1<<endl;
		if(q.size()!=0&&q.back()==s[i]-'a'+1)
		{
			H=now_hash(H,1);
			q.pop_back();
		}
		else {
			q.push_back(s[i]-'a'+1);
			H=now_hash(H,0);
		}
		ans+=cnt[H];
		cnt[H]++;
	}
	cout<<ans;
}

signed main()
{
	//freopen("P9753_19.in","r",stdin);
	
	cin>>n;
	rep(i,1,n)cin>>s[i];
	
	p[0]=1;
	rep(i,1,n)p[i]=p[i-1]*P%mod;
	
	solve();
}

标签:队尾,cnt,hash,P9753,int,rep,2023,now,CSP
From: https://www.cnblogs.com/0tAp-Z/p/18139434

相关文章

  • CPVT:美团提出动态位置编码,让ViT的输入更灵活 | ICLR 2023
    论文提出了一种新的ViT位置编码CPE,基于每个token的局部邻域信息动态地生成对应位置编码。CPE由卷积实现,使得模型融合CNN和Transfomer的优点,不仅可以处理较长的输入序列,也可以在视觉任务中保持理想的平移不变性。从实验结果来看,基于CPE的CPVT比以前的位置编码方法效果更好来源:晓......
  • 新手大白话 [LitCTF 2023]刷题记录1
    我Flag呢直接看源码PHP是世界上最好的语言!进入页面查看源码发现为RCE漏洞。直接system('cat/flag');点击Runcode导弹迷踪js源码问题,f12点开调试器查看game.js代码点击查看代码varMessages={START:{title:getLevelString,text:......
  • 天翼云入选“2023年度数据要素价值创新标杆示范案例”!
    近日,由新一代信息技术产业研究院、赛迪未来产业研究中心共同主办,中国电子学会区块链分会、至顶科技联合承办的“2024未来信息技术大会暨首届数据要素创新发展论坛”于北京成功举办。大会公布了“2023年度数据要素价值创新标杆示范案例”评选结果,天翼云“海南省数据产品超市公共数......
  • 最新《2023中国企业敏捷实践白皮书》发布|4月18日
    2023年是社会各行各业预期迎来复苏与强劲反弹的阶段,却意外遭遇现实的巨大挑战。同时,人工智能技术的飞速发展,组织面临的复杂性和多变性不断加剧,这不仅推动了工作方式和业务模式的演变,也为敏捷实践的有效落地带来了新的挑战。逆境向左,敏捷向右。让我们通过一年一度的中国敏捷实......
  • 云原生周刊:CNCF 2023 年度调查报告 | 2024.4.15
    开源项目推荐highlight该项目是一个开源全栈监控平台。其功能包括错误监控、会话重放、日志记录、分布式跟踪等。HelmComposeHelmCompose是一个helm插件,用于在单个配置文件中管理一个或多个图表的多个版本。HAMi异构AI计算虚拟化中间件(HAMi),是一个“一站式”图表,旨在......
  • 新手大白话 FSCTF 2023刷题记录1
    [FSCTF2023]源码!启动!进入页面ctrl+u查看源码得到flagwebshell是啥捏进入页面,发现给出源码笨办法,一个一个找出表情代表啥,最后发现为命令执行函数passthru,而passthru出现在了漏洞点eval处,也就是RCE漏洞,而且进一步查看发现没有过滤,直接打它:细狗2.0进入页面随意输入试试,......
  • 闫忠奥202383310064
    实验1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){ intnumber; inti; srand(time(0)); for(i=0;i<N;++i) { number=rand()%65+1; printf("20238331%04d\n",number); } return0;}......
  • [NeuralPS2023]How Re-sampling Helps for Long-Tail Learning
    这篇文章作者写得非常详细,读起来非常舒适。Contribution:在long-taileddata中,re-sampling不一定有效。re-sampling的失败可能是对于不相关的context过拟合导致的,作者设计了实验论证了这一假说。在single-stage的框架下,作者提出了上下文转换增强(contextualtransformationau......
  • The 2023 ICPC Asia Hong Kong Regional Programming Contest (The 1st Universal Cup
    Preface不知道VP什么就继续找往年的区域赛真题来打了这场题挺合我们队口味的,开场2h就开出了5题(徐神110min的时候就过相对最难的C题),而且手上还有3个会写的题最后中间虽然因为F题卡常(CF评测机太慢导致的)浪费了快1h时间,但索性时间剩余很多还是4h下班了后面的题感觉都不太可做,遂光......
  • 24/04/09 CSP-J 模拟赛
    \(\color{red}(1)\)P2296[NOIP2014提高组]寻找道路在有向图\(G\)中,每条边的长度均为\(1\),现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:路径上的所有点的出边所指向的点都直接或间接与终点连通。在满足条件\(1\)的情况下使路径最短。......