codeforces 710f String Set Queries ac自动机 二进制分组

Codeforces 710F String Set Queries AC自动机+二进制分组 题意 有一个字符串集合D,要求资辞m个操作: 1 str表示在D中加入字符串str 2 str表示在D中删除字符串str 3 str表示询问D中每个字符串在str中的出现次数的和 强制在线 m,∑|str|≤3∗105m,∑|str|≤3∗105m,\sum|str|\le3*10^5 分析 一开始想到一个在线建广义sam+lct的做法,后来羊告诉我说在线建广义sam的复杂度是不对... 阅读详情

题意:维护一个字符串集合,支持插入一个串,删除一个串,询问集合中的串在给出的串中出现多少次,一个串出现多次算多次。并且不会有两次插入的串相同。强制在线。

考虑没有删除的情况,将插入串的个数二进制拆分,对于每2k 个串维护一个ac自动机。
这样共有log个ac自动机
。插入时如果当前ac自动机中串的个数和上一个个数相同,那么合并两个自动机。每个字符串只会被合并log 次。

有删除时同样维护一个删除串的这样的东西,查询时减一下就行了。

#include <bits/stdc++.h>
using namespace std;
#define N 310000
int m,cnt;
char s[N];
struct acauto
{
    int ch[N][27],fail[N],en[N],en1[N],cnt;
    int num[31],root[31],top;
    queue<int>que;
    void acmatch(int x)
    {
        que.push(x);
        while(!que.empty())
        {
            int tmp=que.front();que.pop();
            for(int i=1;i<=26;i++)
                if(ch[tmp][i])
                {
                    int t=fail[tmp],t1=ch[tmp][i];
                    while(t&&!ch[t][i])t=fail[t];
                    fail[t1]=t ? ch[t][i]:x;
                    que.push(t1);
                    en1[t1]=en1[fail[t1]]+en[t1];
                }
        }
    }
    int merge(int x,int y)
    {
        if(!x||!y)return x+y;
        en[x]=en[x]|en[y];
        for(int i=1;i<=26;i++)
            ch[x][i]=merge(ch[x][i],ch[y][i]);
        return x;
    }
    void insert()
    {
        scanf("%s",s+1);int len=strlen(s+1);
        root[++top]=++cnt;
        int now=root[top];
        for(int i=1,t;i<=len;i++)
        {
            if(!ch[now][t=s[i]-'a'+1])
                ch[now][t]=++cnt;
            now=ch[now][t];
        }
        en[now]=1;num[top]=1;
        acmatch(root[top]);
        while(top&&num[top]==num[top-1])
        {
            merge(root[top-1],root[top]);
            acmatch(root[top-1]);
            num[top-1]+=num[top];top--;
        }
    }
    int query(int len)
    {
        int ret=0;
        for(int i=1;i<=top;i++)
        {
            for(int now=root[i],j=1,t;j<=len;j++)
            {
                t=s[j]-'a'+1;
                while(now&&!ch[now][t])
                    now=fail[now];
                now= now ? ch[now][t]:root[i];
                ret+=en1[now];
            }
        }
        return ret;
    }
}ac1,ac2;
int main()
{
    //freopen("tt.in","r",stdin);
    scanf("%d",&m);
    for(int t;m--;)
    {
        scanf("%d",&t);
        if(t==1)ac1.insert();
        else if(t==2)ac2.insert();
        else 
        {
            scanf("%s",s+1);int len=strlen(s+1);
            printf("%d\n",ac1.query(len)-ac2.query(len));
            fflush(stdout);
        }
    }
    return 0;
PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力 本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。 阅读详情

相关推荐

国产化软件设计:遵循信创要求,助力信息技术自主创新

支持国产操作系统、CPU、数据库和中间件。确保网络通信的身份鉴别、数据传输机密性和完整性。实现应用和数据层的身份鉴别、数据传输机密性完整性、数据存储机密性完整性。依托法院密码服务平台提供的商用密码能力。

qq_41186565的博客 3372

codeforce 1437:G. Death DBMS(AC自动机 + 树链剖分)

题目链接 题目大意: 一开始有 n 个串,每个串有一个初始值 viv_ivi​,注意串可能会相同。接下来有 mmm 个操作,每个操作有两种类型: 类型一:输入串 ttt,若 nnn 个串中有串是 ttt 的子串,输出这些串的权值的最大值,否则输出 −1-1−1 类型二:修改第 xxx 串的值为 yyy 要知道哪些串是 ttt 的子串,显然可以借助AC自动机,通过暴力跳 failfailfail 链可以找到所以 ttt 的子串,并找到这些串的权值的最大值,但复杂度是 O(∣t∣∗∣∑∣s∣∣)O(|t|*|

qq_41997978的博客 454

人工智能——框架表示法

1975年美国明斯基在“A framework for representing knowledge”提出了框架理论。 1. 框架及框架的一般表示形式 框架:一种描述对象属性的数据结构。 框架的一般表示形式 <框架名> 槽名1: 侧面名1:值1,值2…,值p1 侧面名2:值1,值2…,值p2 侧面名2:值1,值2…,值pm1 槽名2: 侧面名...

weixin_33759269的博客 1642

【题解】Codeforces 963D. Frequency of String AC自动机

给定字符串S(1e5)S(1e5)S(1e5),有q(1e5)q(1e5)q(1e5)个询问,每次给定一个整数kik_iki​和字符串mim_imi​。 让你从SSS中选择一个子串TTT,且mim_imi​在TTT中出现了至少kik_iki​次。 保证mim_imi​的长度之和不超过1e51e51e5,保证所有的mim_imi​不相同。 这道题的关键在最后的两个保证上。 使用AC自动机可以求得所......

秋叶红于二月花 682

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

从仿真到器件:铌酸锂电光调制器Comsol建模避坑指南

本文详细介绍了铌酸锂电光调制器在Comsol中的建模全流程,涵盖晶体切向选择、材料参数配置、多物理场耦合等关键技术。通过实战案例和调试技巧,帮助工程师避开常见建模陷阱,提升仿真精度与效率,特别适用于高速光通信系统的器件设计与优化。

m2n3b4v5c6的博客 419

Codeforces 163E (AC自动机&fail树+dfs序+树状数组)

http://codeforces.com/contest/163/problem/E 实在不好意思,自己画的时候确实有点粗心,感谢大家的提醒。。这次图应该画对了。。 题意:给你几个串,然后后面有些操作,分别是给你一个文本串问哪些模式串在文本串出现了多少次,剩下两个分别就是删除一些字符串,和恢复一些字符串。 做法:AC自动机,(据说还有后缀数组。。不会),如果做过阿狸的打字机这道题应该知道怎...

KXL5180的博客 519

Nginx配置Cookie安全属性:HttpOnly、Secure、SameSite实战指南

Cookie是Web应用中维持用户状态的核心机制,其安全配置直接关系到会话管理与身份认证的可靠性。从原理上讲,HttpOnly属性可防止XSS攻击窃取Cookie,Secure属性确保Cookie仅在HTTPS加密连接中传输,而SameSite属性则用于控制跨站请求时Cookie的发送行为,能有效防御CSRF攻击。这些安全属性的技术价值在于构建纵深防御体系,提升应用的整体安全性。在现代浏览器(如Chrome 80+)默认将未明确声明的Cookie视为SameSite=Lax的背景下,正确配置这些属性变得尤为

weixin_33783283的博客 320

codeforces 710F Trie树+kmp Trie树板子和kmp板子

You should process m queries over a set D of strings. Each query is one of three kinds:Add a string s to the set D. It is guaranteed that the string s was not added before. Delete a string s from the

Hallelujah520的博客 767

Excel下拉公式不自动计算?5步彻底解决!

Excel下拉公式不自动计算?5步彻底解决!在使用Excel处理数据时,公式下拉填充是提升效率的核心操作。但许多用户都遇到过这样的困惑:明明设置了公式,下拉时结果却纹丝不动。本文将从技术原理出发,结合5步实操方案,为您彻底解析这个高频问题的根源与解决方案。

mmoo_python的博客 1万+

lisflood-fp(一)从源码到可执行文件:Windows下的Cmake实战编译指南

本文详细介绍了在Windows环境下使用Cmake工具编译lisflood-fp水文模型源码生成可执行文件的全过程。从开发环境配置、源码获取到实战编译,逐步指导如何解决常见错误并处理运行时依赖,最终生成可用的exe文件。特别适合水文专业研究者和工程师学习参考。

weixin_30555125的博客 481

【Codeforces 1163D】Mysterious Code | AC自动机、fail树上dp

题目链接:https://codeforces.com/contest/1163/problem/D 题目大意: 首先定义f(s,t)函数,表示t中含有s串个数 之后首先给出一个c串,由'*'和小写字母组成,其中'*'可以替换为26个字母中的任意一个 之后给出两个串s,t。 要求你根据c串中的'*'构造c串使得f(s,c) - f(t,c)最大 题目思路: 多字符串包含关系必然会想到AC自动机 首先考虑,建立AC自动机时,节点得权值情况 在字典树上s的终结点权值为1,t的终结点权值为-1

一只酷酷光儿的博客 839

突破Cloudflare 5秒盾:TLS指纹伪装+Playwright行为模拟,爬虫存活率从35%提至78%

TLS指纹精准识别:Cloudflare会解析客户端的TLS Client Hello包(如SSL版本、密码套件、扩展字段),Python的requests/urllib库的TLS指纹是“黑名单级”,请求一出即被拦截;行为特征检测:静态的浏览器伪装(如User-Agent)已失效,Cloudflare会监控页面加载后的行为(是否有鼠标移动、滚动、点击,行为是否机械);JS环境深度验证:通过WebGL、Canvas、字体渲染、Navigator属性生成浏览器指纹,无头浏览器的默认配置会被瞬间识别;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2360

【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组

F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standard input output:standard output You should processmqueries over a setD...

weixin_30408309的博客 126

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

CodeForces - 710F String Set Queries

题意: 一个字符串集合,初始为空,mmm 次操作:① 1,s1, s1,s,加入字符串 sss,保证 sss 此前未在集合里;② 2,s2, s2,s,删除字符串 sss;③ 3,s3, s3,s,询问集合中字符串在 sss 中出现的次数总和。强制在线。(m,∑∣si∣≤3×105)(m, \sum |s_i| \leq 3×10^5)(m,∑∣si​∣≤3×105) 链接: https://co...

weixin_44059127的博客 248

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[CF710F]String Set Queries

codeforces description 维护一个字符串集合,支持加入一个串,删除一个串,查询集合中的串在给出串中出现了多少次。 强制在线。 sol 二进制分组。维护\(\log\)个\(\mbox{AC}\)自动机,每插入一个串后依次合并,并重建\(\mbox{fail}\),保证每个大小的\(\mbox{AC}\)自动机只存在一个。 有删除操作?注意到这里的答案是具有可减性的,所...

abcyan1235的博客 313

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Codeforces710F】String Set Queries (强制在线)AC自动机

这个强制在线AC自动机。。。。 AC自动机是不可以修改的。 但是可以做到重构,合并O(n)O(n)O(n) 那么就开两个AC自动机,sizesizesize分别为n,m(m&amp;lt;n)n,m(m&amp;lt;n)n,m(m&lt;n) 那么每次m&amp;gt;Sm&amp;gt;Sm&gt;S时就将自动机合并,每次往第二个自动机加串时就重构。 那么合并O(nS)O(\frac nS)O...

Freopen的博客 492

【Codeforces710F】String Set Queries 多解

题目大意 给NNN个操作。 1.插入一个串SSS。 2.删除一个串SSS 。 3.询问未被删除的串在SSS中出现的次数。 ∑∣S∣≤3e5\sum |S| \leq 3e5∑∣S∣≤3e5,强制在线。 Solution 此题有多种解法,这里例举说明几种。(设LLL为总长) Solution 1 如果不强制在线,那么ACACAC自动机,后缀自动机都可以做此问题。(对于删除可以再建一个专门的删除的串...

Demon_Rieman的博客 334

题解-Codeforces710F String Set Queries

咕了好久没更博客,最近得知可以去冬眠营玩耍,还可以搭顺风车回广州过年 (最近做到的比较有意思的题目:bzoj3958、hihocoder1419) Problem Codeforces-710F--洛谷提交入口 题目概要:维护一个字符串集合,要求支持:加字符串、删字符串和查询当前所有已加入且未被删除的字符串在给出模板串中出现的次数(操作数&字符串总长\(\leq 3\times 10^5\...

weixin_30312557的博客 139

CF710F String Set Queries 三种解法

本蒟蒻来介绍一下三种方法吧 codeforces 传送门 & 洛谷传送门 Solution 1(暴力 & 哈希) 第一种方法比较暴力,它的关键点在于: 所有字符串的总长不超过 m=3×105m=3\times10^5m=3×105,不难想到最多有不超过 2m2\sqrt m2m​ 种不同的长度。大概是不超过 800 的。所以遍历子串时只需要遍历 O⁡(m)\operatorname O(\sqrt m)O(m​) 种长度的子串就行了。 根据这一结论,我们可以暴力地维护 O⁡(m)\op

FelFa_1414666的博客 580

Codeforces AC自动机 题目汇总

86C codeforces 149E. Martian Strings 163E 291E

qq_39898877的博客 700

【Codeforces 149E】Martian Strings | KMP、AC自动机

想刷下AC自动机的题,搜出来个这个 但是用KMP过了.. 题目链接:https://codeforces.com/contest/149/problem/E 题目大意: 给出一个t串,和m个s串,对于每个s串判断是否可以在t串中找出两个子串 使得T[a,b] + T[c,d] = s 输出所有可以的s串的个数 题目思路: Thinking_1 嗯...稍后会更新AC自动机的写法 考虑kmp,pre_i代表s串前缀与t串前i个前缀匹配的最大长度 预处理好pre数组之后 将s串翻转,处理

一只酷酷光儿的博客 665

codeforces 1163D(AC自动机dp)

题意:给定一个文本串,两个模式串,将文本串的*替换为26个 字母,使得第一个模式串出现的次数减去第二个模式串出现的次数的差值最大。 思路:fail树的应用 我们对两个模式串建立AC自动机,并计算出每个状态的权值。每个状态的权值定义为其fail树上一直到根节点的权值之和。原因为走到这个节点,就相当于到根节点路径上的的所有前缀都已经访问过了。 #include &l...

ehdhg13455的博客 444

Codeforces 86C Genetic engineering (AC自动机好题)

Codeforces 86C Genetic engineering (AC自动机好题) 题意:给出一个字符串集合,总共有m个字符串,每个字符串长度不超过10。然后给出一个n,构造长度为n的串,这个串上的每一个字符,往前,往后延伸构成的若干个字符串中,至少有一个包含在字符集里的某一个字符串里面。问有多少种构造方法。。 解题思路:AC自动机。。这题还是比较难想的啊。首先我们可以定下两维状态,dp

No__stop 1935

【Codeforces 1437G】Death DBMS | AC自动机fail树上树链剖分

题目连接:https://codeforces.com/contest/1437/problem/G 题目大意: 首先给出一个数据库,数据库中包含n个字符串 接下来支持两个操作: 1.将第i个字符串的权值改为w 2.询问字符串q中,包含的所有在数据库中的字符串中的最大权值(起初取值为0),如果没有包含数据库中的字符串输出-1 题目思路: 一个很明显的思路: 用AC自动机将fail树建立起来 有了fail树之后,对于询问串的每一个位置,从第一次能匹配到的位置开始到根节点的最大值,就是以该位置

一只酷酷光儿的博客 579

Codeforces 1163F Indecisive Taxi Fee 最短路树

题意 给一个nnn个点mmm条边的无向图,边有边权。每次会改变一条边的边权,并询问111到nnn的最短路。询问之间独立。 n,m,q≤200000n,m,q\le200000n,m,q≤200000 分析 这跟HNOI2014道路堵塞基本就是一个题。 最短路分两种情况:经过修改的边和不经过修改的边。第一种情况可以通过预处理最短路直接得出,第二种情况相当于要求删掉一条边后从111到nnn的最短路。 ...

beginend 480
上一篇: 1998: Fsk物品调度 并查集
下一篇: poj 1486 网络流+tarjan
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值