字尾陣列 O n 三分實現

2022-06-03 09:06:09 字數 1684 閱讀 4674

比起wc關於字尾陣列的倍增法,要更有效率,由於模版使用的是指標,所以在new和delete處效率會有所消耗

來自nit的字尾陣列模版 注意在字串間加入特殊符號進行區分 避免lcp越界

samlpe測試為hdu 1403~~

#include

<

iostream

>

#include

<

cmath

>

#include

<

cstring

>

using

namespace

std;

const

intmaxn

=210000

;char

s[maxn];

intlen,k;

intsa[maxn],rank[maxn],lcp[maxn];

intnum[maxn];

inline 

bool

leq(

inta1, 

inta2, 

intb1, 

intb2)

inline 

bool

leq(

inta1, 

inta2, 

inta3, 

intb1, 

intb2, 

intb3)

static

void

radixpass(

int*

a, int

*b, 

int*

r, int

n, int

k)for

(i =

0; i 

<

n; i

++) 

b[c[r[a[i]]]

++] 

=a[i];

delete  c;

}void

suffixarray(

int*

t, int

*sa, 

intn, 

intk)

if(sa12[i] %3

==1) else}if

(name 

<

n02)

else

for(

inti =0

; i 

<

n02; i

++) sa12[r[i] -1

] =i;for

(i =

0, j =0

; i 

<

n02; i

++) 

if(sa12[i] 

<

n0) r0[j

++] =3

*sa12[i];

radixpass(r0, sa0, t, n0, k);

for(

intp =0

, t 

=n0 

-n1, k =0

; k 

<

n; k++)

else

}delete  r; delete  sa12; delete  sa0; delete  r0;

}void

lcp(

char

*str)  } 

}int

main()

hdu 3400 Line belt 三分套三分)

題意 在乙個二維空間中給出兩條線段ab,cd,線段ab,cd上的運動速度分別為p,q。在這兩條線段之外的空間上運動的速度為r。求從a到d的最短時間。思路 ps 在這種求解方法中,中間運用了比較多的除法,導致精度損失,所以再開方前加乙個eps,防止開方後的值比真實值小。include include ...

三分 三分求極值 HihoCoder 1142

描述 在之前的幾周中我們了解到二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸形函式時,二分法就無法適用,這時就需要用到三分法。從三分法的名字中我們可以猜到,三分法是對於需要逼近的區間做三等分 week40 2.png 我們發現lm這個點比rm要低,那麼我們要找的最小點一...

HIHOCODER 1142 三分 三分求極值

這一次我們就簡單一點了,題目在此 在直角座標系中有一條拋物線y ax 2 bx c和乙個點p x,y 求點p到拋物線的最短距離d。第1行 5個整數a,b,c,x,y。前三個數構成拋物線的引數,後兩個數x,y表示p點座標。200 a,b,c,x,y 200 第1行 1個實數d,保留3位小數 四捨五入 ...