1. 程式人生 > >bzoj千題計劃315:bzoj3172: [Tjoi2013]單詞(AC自動機)

bzoj千題計劃315:bzoj3172: [Tjoi2013]單詞(AC自動機)

#include<queue>
#include<cstdio>
#include<cstring>

using namespace std;

#define N 2000001

using namespace std;

int pos[201];

int tr[N][26],id=1;
int f[N],ans[N];

char s[1000001];

queue<int>q;

int d[N],cnt;

void insert(int &pos)
{
    int now=1,len=strlen(s);
    
int x; for(int i=0;i<len;++i) { x=s[i]-'a'; if(!tr[now][x]) tr[now][x]=++id; now=tr[now][x]; ans[now]++; } pos=now; } void get_fail() { for(int i=0;i<26;++i) tr[0][i]=1; q.push(1); int now,j; while(!q.empty()) { now
=q.front(); d[++cnt]=now; q.pop(); for(int i=0;i<26;++i) if(!tr[now][i]) tr[now][i]=tr[f[now]][i]; else { q.push(tr[now][i]); j=f[now]; f[tr[now][i]]=tr[j][i]; } } }
int main() { int n; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%s",s); insert(pos[i]); } get_fail(); for(int i=cnt;i;--i) ans[f[d[i]]]+=ans[d[i]]; for(int i=1;i<=n;++i) printf("%d\n",ans[pos[i]]); }

相關推薦

bzoj計劃315bzoj3172: [Tjoi2013]單詞AC自動機

#include<queue> #include<cstdio> #include<cstring> using namespace std; #define N 2000001 using namespace std; int pos[20

bzoj計劃319bzoj2865: 字串識別字尾自動機 + 線段樹

#include<map> #include<cstdio> #include<cstring> #include<algorithm> #define N 500001 using namespace std; char s[

[BZOJ3172 ][Tjoi2013]單詞AC自動機

.com ans 多少 http root 初始化 fail #define 否則 Description 不穩定的傳送門 某人讀論文,一篇論文是由許多單詞組成。但他發現一個單詞會在論文中出現很多次,現在想知道每個單詞分別在論文中出現多少次。單詞個數<=200,單

bzoj計劃316bzoj3173: [Tjoi2013]最長上升子序列二分+樹狀陣列

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 100001 #define lowbit(x) x&-x

bzoj計劃311bzoj5017: [Snoi2017]炸彈線段樹優化tarjan構圖

#include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int mod=1e9+7;

bzoj計劃314bzoj3238: [Ahoi2013]差異字尾陣列+st表+單調棧

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int n

bzoj計劃308bzoj4589: Hard Nim倍增FWT+生成函式

#include<cstdio> #include<cstring> using namespace std; #define N 50001 const int mod=1e9+7; const int M=1<<16; int inv

BZOJ3172單詞AC自動機

sca ++ include 很多 queue 有一點 div body ont 【BZOJ3172】單詞(AC自動機) 題面 Description 某人讀論文,一篇論文是由許多單詞組成。但他發現一個單詞會在論文中出現很多次,現在想知道每個單詞分別在論文中出現多少次。 I

bzoj計劃310bzoj5285: [Hnoi2018]尋寶遊戲(思維+雜湊)

#include<cstdio> #include<algorithm> #define N 5001 using namespace std; const int mod=1e9+7; int bit[N]; char s[N]; int has

bzoj計劃309bzoj4332: JSOI2012 分零食分治+FFT

#include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int M=1<<17; #define N 10001 int m,

bzoj計劃321bzoj5251: [2018多省省隊聯測]劈配網路流 + 二分

#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d

bzoj計劃312bzoj2119: 股市的預測字尾陣列+st表

#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d

bzoj計劃317bzoj4650: [Noi2016]優秀的拆分字尾陣列+差分

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 30002 using namespace std; int n;

bzoj計劃318bzoj1396: 識別子串字尾自動機 + 線段樹

#include<cstdio> #include<cstring> #include<algorithm> #define N 100001 using namespace std; char s[N]; int ch[N<&

bzoj計劃323bzoj1951: [Sdoi2010]古代豬文Lucas+CRT+尤拉定理

#include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typ

bzoj計劃322bzoj2561: 最小生成樹最小割

#include<cstdio> #include<queue> #include<cstring> #include<iostream> #include<algorithm> using namespace std;

bzoj計劃324bzoj5249: [2018多省省隊聯測]IIIDX線段樹

#include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int d[N

bzoj計劃313bzoj3879: SvT字尾陣列+st表+單調棧

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 #define M 3000001 int n,m,mm;

bzoj計劃320bzoj4939: [Ynoi2016]掉進兔子洞莫隊 + bitset

#include<cmath> #include<cstdio> #include<bitset> #include<cstring> #include<iostream> #include<algorithm> us

[Bzoj3172][Tjoi2013]單詞fail樹

print bmi output bzoj tin ref des HP sin 3172: [Tjoi2013]單詞 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4777 Solved: 2345[Su