Codeforces 1483F - Exam(AC 自动机)】的更多相关文章

要点 显然ac自动机的板子就可以暴力一下答案了 为了优化时间复杂度,考虑套路fail树的dfs序.发现本题需要当前这个尾点加上所有祖先点的个数,考虑使用树状数组差分一下,在父点+1,在子树后-1,每次询问前缀和即可 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <sstream> #include <string&…
Codeforces 题目传送门 & 洛谷题目传送门 一道 ACAM 的 hot tea 首先建出 ACAM.考虑枚举长串,以及短串在长串中出现的最后位置 \(j\),这个复杂度显然是 \(\mathcal O(\sum|s_i|)\) 的不会出问题.那么显然只有以 \(s_{i,j}\) 为结尾的.长度最长的字符串才有可能被统计进答案,否则就不满足题目中的条件了,而这个字符串,显然就是 \(s_{i,j}\) 对应位置在 fail 树上向上跳得到的第一个是某个字符串结尾的位置所对应的字符串,这…
AC自动机(Aho-Corasick Automata)是经典的多模式匹配算法.从前我学过这个算法,但理解的不深刻,现在已经十分不明了了.现在发觉自己对大部分算法的掌握都有问题,决定重写一系列博客把学过的算法review一下,目标是: 充分理解算法的原理与实现细节 形成一个简洁明了,能很好反映原理的写法,作为模板 Codeforces上讲解AC自动机的一篇博客. Wikipedia  词条Aho–Corasick algorithm Overview Concepts finite state…
题目 Source http://codeforces.com/problemset/problem/717/G Description You have recently fallen through a hole and, after several hours of unconsciousness, have realized you are in an underground city. On one of your regular, daily walks through the un…
题目链接:http://codeforces.com/contest/710/problem/F 题意:维护一个集合,集合要求满足三种操作. 1 str:向集合插入字符串str(保证不会插入之前已经插入过的字符串) 2str:从集合中删除字符串str(保证删除的str一定在集合中) 3 str:str的子串有多少个在集合中出现过. 思路:题目意思就是一个可以插入/删除/查询的AC自动机.但是如果我们暴力求解,每次添加/删除一个字符串到自动机中求从前求一边适配指针的话会TLE.所以我们考虑用其他方…
Prelude 传送到Codeforces:(/ω\)--- (/ω•\) Solution 很水的一道题. 对查询的串建出来AC自动机,然后树上随便跑跑就行了. 为什么要写这篇题解呢? 我第一眼看到这个题:"哈哈,有根树上的路径信息查询,点分治就好了,被我秒啦!" "这个题好像是某Qualification Round的题啊...怎么Qual就出点分治啊,真毒瘤." 然后码码码... "怎么TLE了,卡卡常." 卡常ing... "怎…
题目大概是给几个DNA片段,求构造一个长度n的字符串的方案数,要求这个字符串每个位置的字符都属于某个包含于此字符串的DNA片段. 把那些DNA片段建一个AC自动机.考虑状态的表示: dp[len][x][k]表示长度len且后缀状态为自动机结点x且后k位还不满足要求的方案数 然后转移就是向自动机上四个方向的结点走,如果下一步结点x'是某DNA的后缀且长度比k大,那就是转移到dp[len+1][x'][0]否则转移到dp[len+1][x'][k+1].另外因为DNA最长10,所以第三维k不会超过…
Bracket Substring 这么垃圾的题怎么以前都不会写啊, 现在一眼怎么就会啊.... 考虑dp[ i ][ j ][ k ][ op ] 表示 已经填了 i 个空格, 末尾串匹配到 所给串的 第 j 个, 已经放了 k 个左括号, 是否存在所给串的方案数. 因为不匹配的不是从头开始的, 所以暴力求下一个或者直接ac自动机都可以. #include<bits/stdc++.h> #define LL long long #define LD long double #define u…
ou 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 set D. It is guaranteed that the string s is in th…
Tree-String Problem 网上的dfs + kmp 复杂度就是错的, 除非算出根据下一个字符直接转移Next数组直接转移, 而求出Next[ i ][ 26 ]数组和丢进AC自动机里面没有区别.. 然后我的AC自动机还写麻烦了.. 我把全部都求进去求fail然后沿着fail推到目标串, 好蠢啊啊. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk m…