【Ac自動機】hdu 5880 Family View
Link:http://acm.split.hdu.edu.cn/showproblem.php?pid=5880
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1000110;
int len[N];
int res[N];
struct Aho
{
struct Node{
int nex[26];
int fail,endd;
}node[N];
int Size;
queue<int> que;
int newnode(){
for(int i = 0; i < 26; i++)
node[Size].nex[i] = 0;
node[Size].fail = node[Size].endd = 0;
return Size++;
}
void init(){
while(que.size()) que.pop();
Size = 0;
newnode();
}
void Insert(char *s,int id)
{
int L = len[id];
int now = 0;
for(int i = 0; i < L; i++){
int x = s[i]-'a';
if(node[now].nex[x]==0)
node[now].nex[x]=newnode();
now = node[now].nex[x];
}
node[now].endd = id;
}
void build()
{
node[0].fail = 0;
for(int i = 0; i < 26; i++)
{
if(node[0].nex[i])
{
node[node[0].nex[i]].fail = 0;
que.push(node[0].nex[i]);
}
}
while(que.size())
{
int u = que.front();
que.pop();
for(int i = 0; i < 26; i++)
{
if(node[u].nex[i]==0)
node[u].nex[i] = node[node[u].fail].nex[i];
else
{
node[node[u].nex[i]].fail = node[node[u].fail].nex[i];
que.push(node[u].nex[i]);
}
}
}
}
int pos[N];
void marth(char *s)
{
memset(pos,0,sizeof(pos));
int L = strlen(s);
int now = 0;
for(int i = 0; i < L; i++)
{
int x;
if(s[i] >= 'a' && s[i] <= 'z')
x = s[i]-'a';
else if(s[i] >= 'A' && s[i] <= 'Z')
x = s[i]-'A';
else
continue;
now = node[now].nex[x];
int temp = now;
while(temp)
{
if(node[temp].endd)
{
pos[i+1]-=1;
pos[i-len[node[temp].endd]+1]+=1;
}
temp = node[temp].fail;
}
}
long long cnt=0;
for(int i=0;i<L;i++)
{
cnt+=pos[i];
if(cnt<=0) printf("%c",s[i]);
else printf("*");
}
puts("");
}
}aho;
char s[N];
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
aho.init();
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%s",s);
len[i] = strlen(s);
aho.Insert(s,i);
}
aho.build();
getchar();
gets(s);
// printf("%s\n",s);
aho.marth(s);
}
return 0;
}
相關文章
- hdu2243 ac自動機+矩陣連乘矩陣
- [複習] AC自動機
- AC自動機 提高篇
- AC自動機:Tire樹+KMPKMP
- hdu 1277 AC自動機入門(指標版和陣列版)指標陣列
- AC 自動機——多模式串匹配模式
- AC自動機學習筆記筆記
- AC 自動機學習筆記筆記
- hdu2896 AC自動機-標記哪些模式串在目標串中出現過模式
- POJ 3691 DNA repair (AC自動機 + dp)AI
- hdu2222 AC自動機-給定串中出現了幾個模式串模式
- 從零開始發明 AC 自動機
- AC自動機+字典序+樹狀陣列陣列
- hdu3065 AC自動機-每個標準串在模式串中出現的次數模式
- hdu5384 AC自動機模板題,統計模式串在給定串中出現的個數模式
- Aho-Corasick 演算法 AC自動機實現演算法
- 【Ac自動機+矩陣加速】poj 2778 DNA Sequence矩陣
- poj 2778 AC自動機與矩陣連乘矩陣
- AC自動機+trie樹實現高效多模式匹配字典模式
- hdu 1241 Oil Deposits 深搜 Ac
- HDU 1016 java 已AcJava
- poj--2778DNA Sequence+AC自動機+矩陣快速冪矩陣
- IOS自動進行View標記iOSView
- POJ 2778-DNA Sequence(AC自動機+構建鄰接矩陣+矩陣快速冪)矩陣
- 【Ac自動機 查詢是否存在一個字典中的字串】hihocoder 1036 Trie圖字串
- BZOJ 1030: [JSOI2007]文字生成器 DP,AC自動機JS
- 自研AC配置(上電過程)
- 自動機
- ac79啟動流程
- HanLP — Aho-Corasick DoubleArrayTire 演算法 ACDAT - 基於雙陣列字典樹的AC自動機HanLP演算法陣列
- bzoj1030: [JSOI2007]文字生成器(AC自動機+Dp)JS
- 自研AP配置(上電發現AC)
- KMP 自動機KMP
- Android自定義view-自繪ViewAndroidView
- css字型font-familyCSS
- 屬性font-family:Font property font-family does not have generic default
- 傑裡之AC696N 的藍芽連線成功自動播放【篇】藍芽
- BOSHIDA AC/DC電源模組:應用於工業自動化領域