這道題和zoj2619的實質性是一樣的,只不過這個中字串的個數比較多,所以就需要建立自動機了,我的zoj上的題是直接用kmp的,只不過這道題麻煩卻讓我糾結了幾天啊,感覺有的時候腦子就是不太會拐彎,就是不會轉化的。
不知道怎麼用ac自動機去轉化然後去建立陣列,然後就今天下午在這裡改了幾乎一下午,挺搞笑的,一有思路就在那裡改,然後改的多了就又回去找最原始的**繼續弄,好歹還是改出來了,現在自己想想思路都是迷糊的啊,其實是看了別人的得出的方程然後啟發下改出來的。
思路:關於ac自動機的建立我就不羅嗦了,就是關於方程的轉換問題,一開始我想的是在所有的字串中相同的長度的字元進行累加放在一行,但是一直wa,然後就沒有什麼想法,到後來改為對沒有個節點進行標記,乙個節點記錄一行,然後就ac了,不過當時只顧著似乎對的興奮沒有怎麼改陣列的大小然後re了一次,囧啊!下面是**,可能改的有點亂啊!
/
// file name: 21631.cpp
// author: wang
// mail:
// created time: 2013-8-8 8:29:19
/#include #include #include #include #include #include #include#include#include using namespace std;
typedef long long ll;
#define inf (int_max/10)
#define sqr(x) ((x)*(x))
#define rep(i, n) for (int i=0; i<(n); ++i)
#define repf(i, a, b) for (int i=(a); i<=(b); ++i)
#define repd(i, a, b) for (int i=(a); i>=(b); --i)
#define clr(ar,val) memset(ar, val, sizeof(ar))
#define pb(i) push_back(i)
#define exp 0.000000001
#define n 101
double a[n][n];
int n,m,tot;
char s[20];
bool vis[50];
vectorvec;//儲存出現的字元
struct node
;node ac[10000];
void init()
void tree()
u=ac[u].next[x];
if(i==len-1) ac[u].sign=true;//代表有以這個結尾的 }}
int fail(int u,int k)
void bulid()
} int len=0;
q.push(0);
while(!q.empty()) }
void work()//如果為true就代表是結尾就不要加了
if(ac[u].next[y]!=-1) sign=1;
if(u==0) break;
u=ac[u].fal;
}if(sign==0)
a[l][0]++;
}rep(i,26)
if(ac[x].next[i]!=-1 && ac[ac[x].next[i]].sign==false)
q.push(ac[x].next[i]);
} repf(i,0,max) a[i][max+1]=n;
n=max+1,m=max+2;
}void guess()
if(k==-1) continue;
if(k!=i)
rep(j,m) swap(a[i][j],a[k][j]);
rep(j,n)
}} if(fabs(0-a[0][0])
AC自動機 建立nlogn個AC自動機
string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...
AC自動機及字尾自動機
ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...
hdoj 2896 病毒侵襲(AC自動機)
思路分析 題目為模式匹配問題,對於乙個給定的字串,判斷能匹配多少個模式 該問題需要靜態建樹,另外需要對ac自動機的模板加以修改,對於每個匹配的模式的最後乙個單詞的fail指標指向root,即可實現乙個 字串進行多次模式匹配 如下 include include include include inc...