比起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位小數 四捨五入 ...