题意:给你n个禁止串,然后你只能用字符表的前m个字符去写一个无限长的串,要求是不能包含禁止串,而且串在后面不能出现循环 比赛的时候想的是先建一个自动机,然后将自动机确定化,不能到达的状态全部弄出来.但是对于剩下的状态就卡住了,我怎么才能知道这些状态会构成循环呢?后来看了别人的代码,看到了强连通分量,我就恍然大悟了.其实只需要对剩下的未确定的状态,根据转移边建图,然后跑一次强连通分量. 这么做的效果就是将原图剩下的状态缩成了一个DAG,我们每次只能由根结点往下走,我们必然需要停留在某个强连通分量里…
题意:先给你一个不超过1000000长度的大串s:接下来输入一个n代表接下来输入的小串个数,小串长度不超过6. 小串分两种类型0和1类型. 0类型表示小串在大串中的最大匹配个数就是常规的AC自动机的做法. 1类型表示小串在大串中不能重合的最大匹配数. 依次输出结果.(所有的串只包含小写字母) 按样例输出,注意每组测试数据后有一个换行. 题意我不想写了抄的,抄这里的 (不好意思啦) 0 类型的就是最开始的模板题 1 类型的处理方式就是,在建立字典树的时候弄一个dep数组,记录每一个节点的深度 然后…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个叫能求出有向图中所有的强连通分量的算法,你决定将这个算法应用到NOI比赛中. 这是一道交互题.交互库有一张有向图,图中有 n 个点和 m 条有向边.为了与交互库交互,你可以进行如下操作: 给定一个点 x 和一些点构成的一个集合 S,交互库将会回答是否存在一条从点 x 到 S 中的任何一个点的有向边. 给定一个点 x 和一些点构成的一个集合 S,交…
找给定s集合里面word全部是同一个字符的,这样的word有几个,如果数量<m就yes,否则就no.#include<iostream> #include<cstring> #include<string> #include<algorithm> using namespace std; int main(void) { int t; string a; cin>>t; while(t--) { int n,m; cin>>n&…
题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如果用KMP肯定会超时. 代码如下: #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <string> #include <queu…
F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standard input output:standard output 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. I…
ZOJ   3228 题目网址:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16401 Description Little jay really hates to deal with string. But moondy likes it very much, and she's so mischievous that she often gives jay some dull problems related to…
Searching the String Time Limit: 7 Seconds      Memory Limit: 129872 KB Little jay really hates to deal with string. But moondy likes it very much, and she's so mischievous that she often gives jay some dull problems related to string. And one day, m…
题目大意 给一棵树,每条边上有一个字符,求有多少对 \((x,y)(x<y)\),满足 \(x\) 到 \(y\) 路径上的边上的字符按顺序组成的字符串为回文串. \(1\leq n\leq 50000,1\leq x_i,y_i\leq n,z_i\in\{0,1\}\) 题解 观察一条经过重心的回文串是长什么样的 \(S\) 是一个任意的字符串,\(T\) 是一个回文串. 建出根到每个节点对应的串的AC自动机. 那么 \(x\) 这边的 \(S\) 串就是 \(x\) 对应的AC自动机节点的…
题目大意: 给一个串s和很多模式串,对每个模式串求s的一个最短的子串使得这个子串中包含至少k个该模式串. 题目分析: 均摊分析,有sqrt(n)种长度不同的模式串,所以有关的串只有msqrt(n)种.暴力用AC自动机找出来即可. 代码: #include<bits/stdc++.h> using namespace std; ; ; int n,num,root,d[maxn],fa[maxn],fail[maxn],Ex[maxn]; string str,query[maxn]; vect…