
[字符串]AC自动机
adnizna
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[HDU][2896][病毒侵袭][AC自动机]
查找多个串是否在目标串中出现,简单的AC自动机应用。。。代码:#include <iostream>using namespace std;struct Node{ int next[100]; int fail, flag; void init(){ for( int i= 0; i< 100; ++i ) next[i]= 0;...2010-04-30 13:48:58 · 177 阅读 · 0 评论 -
[PKU/POJ][2778][DNA Sequence][AC自动机]
利用AC自动机构建一个 DFA, 该 DFA 不经过任何模式串。然后问题转化为在一个图上找经过 n 条边的路径条数。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef long long LL;int n, m, cnt= 0;LL mat[20...2010-04-30 16:32:18 · 164 阅读 · 0 评论 -
[PKU/POJ][3691][DNA repair][AC自动机+DP]
先用AC自动机构建一个不含有任何病毒串的 DFA , dp[i][j] 表示到目标串的第 i 个字符,DFA 状态为 j 时的最小修改数量。则 dp[i][ son[j] ]= min{ dp[i][ son[j] ], dp[i-1][j]+ (tran[j][ son[j] ]!= str[i] ) } tran[j][ son[j] ]表示从 j 到 son[j] 经过的字母边。代码:...2010-05-01 11:06:06 · 105 阅读 · 0 评论 -
[HDU][2243][单词情结][AC自动机 + 矩阵乘法]
题意:给你 n 个单词,求出满足以下条件的单词个数:长度不大于 L 且单词中至少包含一个子串为前面 n 个单词中任意一个。先求出所有单词的数量 26^1+ 26^2+ ... + 26^L,可以用矩阵乘法求出,也可用逆元的方法。然后求出所有不包含 n 个单词的串的数量,这个求法和 pku 2778 相同,只是这里要求出所有长度不大于 L 的字符串数量和,方法参考 pku 3233。两者相减就是答案...2010-05-06 15:34:31 · 114 阅读 · 0 评论 -
[ZOJ/ZJU][3190][Resource Archiver][AC自动机]
给你 n 个串,和 m 个病毒串。要把这 n 个串连起来来,可以重叠,但不能包含 m 个病毒串中的任意一个。求把 n 个串连起来的最小长度。#include <iostream>#include <bitset>#include <cstdio>#include <cstdlib>#include <queue>...原创 2010-05-28 23:07:06 · 146 阅读 · 0 评论