zoj3430 AC自動機模擬

2021-07-11 15:41:52 字數 2278 閱讀 9278

/**********************jibancanyang**************************

*author* :jibancanyang

*created time* : 五 5/ 6 16:14:59 2016

*file name* : jy.cpp

**problem**:

**analyse**:

此題難就難在編碼,還有題意問的是病毒有多少種不是多少個,注意char已經不能表示解碼之後的字元,要用

256的int來表示.

**code**:

***********************[email protected]**********************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef pair pii;

typedef

long

long ll;

typedef

unsigned

long

long ull;

vector

vi;

#define pr(x) cout << #x << ": " << x << " "

#define pl(x) cout << #x << ": " << x << endl;

#define pri(a) printf("%d\n",(a));

#define xx first

#define yy second

#define sa(n) scanf("%d", &(n))

#define sal(n) scanf("%lld", &(n))

#define sai(n) scanf("%i64d", &(n))

#define rep(i, a, n) for (int i = a; i < n; i++)

#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)

const

int mod = int(1e9) + 7, inf = 0x3fffffff;

const

int maxn = 100000 + 13;

const

int maxtrie = 520 * 90 + 12; //注意這裡為最多500個單詞,每個單詞最多500個字母,所以節點最多為乘

const

int maxcharset = 256; //字元集合

const

char charst = 0; //起始字元

int buf[maxn];

int bufcnt;

char base64[maxn];

int bitcnt;

bool bit[maxn * 10];

int getv(char x)

void pb(int x)

}void tobit(char c)

void decode(void)

for (int i = 0; i < bitcnt; i += 8)

buf[bufcnt++] = temp;

}}bool used[523];

struct trie

void init(void)

void insert(int buf, int id)

end[now] = id;

}void build(void)

while (!q.empty()) }}

int query(int buf)

temp = fail[temp];}}

return ret;

}}ac;

int main(void)

sa(m);

ac.build();

for (int i = 0; i < m; i++)

puts("");

}return

0;}

ZOJ 3494 AC自動機 數字DP

有一種bcd編碼方案,求a到b範圍內的數字的bcd編碼有多少個不包含不能包含的字串。數字範圍這麼大,很明顯就能看出來是數字dp。基於ac自動機的數字dp使得數字dp容易了不少,因為ac自動機自帶狀態轉移。在數字dp選取每一位的時候,基於ac自動機狀態轉移一下,如果轉移到不能轉移的狀態,就直接返回 1...

zoj3494 ac自動機 數字dp

題解 把給的串建ac自動機,然後得到的bcd i j bcd i j 表示在ac自動機上的狀態i,後面加入j會轉移的狀態,1表示不能加 然後數字dp,dp i j 表示取到第i位狀態為j後面的數字隨便取的方案數,這裡是記憶化。include include include include inclu...

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...