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

CF710F String Set Queries 题解

CF710F String Set Queries

题目描述

你需要对一个字符串集合D DD处理m mm个查询。每个查询有三种类型之一:

  1. 向集合D DD中添加一个字符串s ss。保证字符串s ss之前没有被添加过。
  2. 从集合D DD中删除一个字符串s ss。保证字符串s ss当前在集合D DD中。
  3. 给定字符串s ss,求集合D DD中所有字符串在s ss中出现的次数总和。如果集合D DD中的某个字符串p pps ss中出现了多次,则应计入所有出现次数。

请注意,你需要以在线模式(online)解决此问题。这意味着你不能一次读取所有输入。你只能在输出上一个三类查询的答案后读取下一个查询。在你的程序中,你需要在每次输出后调用 C++ 的 fflush 或 Java 的 BufferedWriter.flush 函数。

输入格式

第一行包含一个整数m mm1 ≤ m ≤ 3 ⋅ 10 5 1 \leq m \leq 3 \cdot 10^{5}1m3105),表示查询的数量。

接下来的m mm行,每行包含一个整数t tt1 ≤ t ≤ 3 1\leq t \leq 31t3)和一个非空字符串s ss,表示查询的类型以及需要处理的字符串。所有字符串仅包含小写英文字母。

输入中所有字符串总长度不超过3 ⋅ 10 5 3 \cdot 10^{5}3105

输出格式

对于每个三类查询,输出一个整数c cc,表示集合D DD中所有字符串在s ss中出现的次数之和。

输入输出样例 #1

输入 #1

5 1 abc 3 abcabc 2 abc 1 aba 3 abababc

输出 #1

2 2

输入输出样例 #2

输入 #2

10 1 abc 1 bcd 1 abcd 3 abcd 2 abcd 3 abcd 2 bcd 3 abcd 2 abc 3 abcd

输出 #2

3 2 1 0

说明/提示

由 ChatGPT 5 翻译

思路

分块即可。

代码

#include<bits/stdc++.h>usingnamespacestd;constlonglongmod=1e9+33,mod2=1000099721;constlonglongwc=131,wc2=133;longlongm,t,op1=0,op2=0,p1[300005],p2[300005],oj=0,wu[300005],wd[300005],wd2=0,wds[300005],wds2=0,os1[300005],os2[300005],md=0,op=0;string s;map<pair<longlong,longlong>,longlong>mp;intmain(){p1[0]=1;for(inti=1;i<=300000;i++){p1[i]=p1[i-1]*wc%mod;}p2[0]=1;for(inti=1;i<=300000;i++){p2[i]=p2[i-1]*wc2%mod2;}md=sqrt(300000);cin>>m;for(inti=1;i<=m;i++){cin>>t>>s;if(t==1){op1=0;for(intj=0;j<=s.size()-1;j++){op1=(op1*wc+(longlong)s[j])%mod;}op2=0;for(intj=0;j<=s.size()-1;j++){op2=(op2*wc2+(longlong)s[j])%mod2;}mp[{op1,op2}]++;wd[s.size()]++;wu[s.size()]++;if(s.size()>=md+1&&wu[s.size()]==1){wds[++wds2]=s.size();}}elseif(t==2){op1=0;for(intj=0;j<=s.size()-1;j++){op1=(op1*wc+(longlong)s[j])%mod;}op2=0;for(intj=0;j<=s.size()-1;j++){op2=(op2*wc2+(longlong)s[j])%mod2;}mp[{op1,op2}]--;wd[s.size()]--;}else{op=0;op1=0;for(intj=0;j<=s.size()-1;j++){op1=(op1*wc+(longlong)s[j])%mod;os1[j+1]=op1;}op2=0;for(intj=0;j<=s.size()-1;j++){op2=(op2*wc2+(longlong)s[j])%mod2;os2[j+1]=op2;}for(intj=1;j<=md&&j<=s.size();j++){if(wd[j]!=0){for(intl=1;l+j-1<=s.size();l++){op+=mp[{(os1[l+j-1]-os1[l-1]*p1[j]%mod+mod)%mod,(os2[l+j-1]-os2[l-1]*p2[j]%mod2+mod2)%mod2}];}}}for(intj=1;j<=wds2;j++){if(wds[j]<=s.size()){for(intl=1;l+wds[j]-1<=s.size();l++){op+=mp[{(os1[l+wds[j]-1]-os1[l-1]*p1[wds[j]]%mod+mod)%mod,(os2[l+wds[j]-1]-os2[l-1]*p2[wds[j]]%mod2+mod2)%mod2}];}}}cout<<op<<endl;cout.flush();}}return0;//}
http://www.jsqmd.com/news/1106000/

相关文章:

  • 深度学习核心架构与工业部署实战指南
  • 选芯片编程烧录座,这3个专业性价比最稳
  • 3分钟上手AutoScreenshot:Windows和Linux自动截屏神器
  • Qt-摄像头捕获画面
  • 直流电机静音控制方案:从PWM优化到PCB布局
  • 大规模服务 ROI 评估:别让概念替代成本账本
  • 【2026年华为暑期实习(AI)-7月1日-第一题- 选择题】(题目+思路+JavaC++Python解析+在线测试)
  • 【项目实战】基于OpenCV和BDD100K数据集的辅助驾驶车道线检测与碰撞预警系统
  • 卡梅德生物科普:CD48(SLAMF2)的免疫调控机制与研究工具选择
  • SQL 复杂查询优化:先减少扫描,再谈语法漂亮
  • Better BibTeX 终极指南:告别LaTeX文献管理的混乱时代
  • 6. 深入 Nginx 核心:HTTP 11 个处理阶段与模块开发实战
  • 轻量级AI模型实战:低配设备部署与优化指南
  • 【2026年华为暑期实习(AI)-7月1日-第三题- Certainty Forcing 训练损失计算】(题目+思路+JavaC++Python解析+在线测试)
  • 基于ICM-42605和GD32VF103的6DOF运动追踪系统设计
  • adb截图-------在小程序中实现纯 JS 驱动的 ADB 客户端
  • 输入输出流重载说明:std::ostream operator<<(std::ostream os, const Vector v)
  • AI 辅助:前端工程化效率:快不是少检查,而是少返工
  • Python在AI开发中的核心优势与实战技巧
  • 变分量子本征求解器(VQE)原理与NISQ设备应用
  • 深度学习Pipeline与Baseline构建指南
  • 【6.20】射频\+FPGA\+Verilog\+仪器自动化 完整知识链路复盘
  • 智能体时代,软件工程的本质
  • 现在系统运行基本上正常,较少遇到问题了
  • 采齿背后的能量闭包原理
  • 截屏、OCR、翻译、录屏全打包?这款开源软件,一个快捷键搞定所有!
  • OpenHarmony 英语学习 App 实战:从 0 到 1 搭建中小学生英语学习应用
  • 工程化赋能传统业务工作流:先找重复劳动,不要先找服务
  • 大模型评测与AI产品质量保障:第7篇 机器学习的三种学习范式
  • SQL实战:测试必会的增删改查,从入门到熟练