oracle 串行,串行factor oracle , 类 ac

#include"stdio.h"

#include"math.h"

#include"iostream"

//#include"assert.h"

using namespace std;

//#include"conio.h"

//#include"io.h"

#define FAIL -1

#define Init 0

#define N 10101000

#define M 1010

#define ML 11111

#define AS 128

#define INF (int)((unsigned int)(-1)>>2)

#define _max(a,b) (a>b?a:b)

#define _min(a,b) (a

long lrs[N]={0};

long  bk[N]={0};

long belong[N]={0};

int cac[ML][M]={0};

int  trans[AS][ML];

long m,n,ml0;

char p[N];

inline int LengthCommonSuffix(int p1, int p2)

{

if (p2 == bk[p1]) return lrs[p1];

while (bk[p1] != bk[p2])

p2 = bk[p2];

return _min(lrs[p1], lrs[p2]);

}

inline int LengthRepeatedSuffix(int p1, int s)

{

if (s == Init) return 0;

return LengthCommonSuffix(p1, s - 1) + 1;

}

void Oracle_on_line(char *p, int n)

{

void Analy(int,int,int);

int k, s, j, u;

char c;

for(j = 0; j < AS;j++)

for(k = 0;k < ML;k++)

trans[j][k]=FAIL;

memset(cac, 0, sizeof cac);

memset(lrs, 0, sizeof lrs);

memset( bk, 0, sizeof  bk);

bk[Init] = FAIL;

for (j = 0; j

c = p[j];

if(belong[j]==0)

trans[c][j] = j + 1;

u = j;

k = bk[j];

//assert(k

while (k > FAIL && trans[c][k] == FAIL)

{

if(belong[j]==0)

trans[c][k] = j + 1;

u = k;

k = bk[k];

}

&nbsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值