You are on page 1of 53

CC BI TON DUYT

1. Robot qut vi ( http://vn.spoj.pl/problems/NKROBOT )


C 9 cn phng (nh s t 1 n 9) c qut vi vi mu trng, xanh hoc vng. C 9 robot
(nh s t 1 n 9) ph trch vic qut vi. Mi robot ch qut mt s phng nht nh. Vic
qut vi c thc hin nh mt chng trnh ci sn theo qui tc:
Nu phng ang c mu trng th qut mu xanh
Nu phng ang c mu xanh th qut mu vng
Nu phng ang c mu vng th qut mu trng
Cn phi gi ln lt mt s cc robot ra qut vi (mi ln mt robot, mt robot c th gi nhiu
ln v c th c robot khng c gi. Robot c gi s qut vi tt c cc phng m n ph
trch) cui cng cc phng u c mu trng.

Yu cu: Hy tm mt phng n nh vy sao cho s ln gi robot l t nht. Gi thit rng lng
vi cho mi lt qut i vi cc phng l nh nhau.

Input
9 dng u: dng th i m t mt danh sch cc phng do robot i ph trch vic qut vi.
Mi dng l mt chui cc ch s t 1..9 biu din cc s hiu ca cc phng, cc ch s
vit st nhau.
Dng cui m t mu vi ban u ca cc phng. Dng gm 9 k t vit st nhau gm
ton cc ch ci T (trng), X (xanh), V(vng) biu din mu ban u ca 9 cn phng theo
trt t s hiu ca chng.
Output
gm mt dng
Nu khng c phng n th in ra s 0
Tri li th in ra dy th t cc robot c gi (s hiu cc robot c vit st nhau v in
ra kt qu c th t t in b nht)
Example
Input:
159
123
357
147
5
369
456
789
258
XVXVXVTXT
Output:
2255799
Hng dn:
Ch rng, sau 3 ln qut vi th mu ca mt cn phng tr li nh c. Bi vy, vic s dng
mt robot 3 ln l khng ti u. Ta c th gii bi ton bng cch sinh dy tam phn di 9,
mi gi tr a[i] chnh l s ln gi robot i.
2. DY ABC
Cho trc mt s nguyn dng N (N 100), hy tm mt xu ch gm cc k t A, B, C tho mn
3 iu kin:
- C di N
- Hai on con bt k lin nhau u khc nhau (on con l mt dy k t lin tip ca xu)
- C t k t C nht.

Hng dn:
Nu dy X
1
X
2
X
n
tho mn 2 on con bt k lin nhau u khc nhau, th trong 4 k t lin tip
bt k bao gi cng phi c 1 k t "C". Nh vy vi mt dy con gm k k t lin tip ca dy X
th s k t C trong dy con bt buc phi k div 4.
Ti bc th chn X
i
, nu ta c T
i
k t "C" trong on chn t X
1
n X
i
, th cho d cc
bc quy tip sau lm tt nh th no chng na, s k t "C" s phi chn thm bao gi cng
(n - i) div 4. Tc l nu theo phng n chn X
i
nh th ny th s k t "C" trong dy kt qu
(khi chn n X
n
) cho d c lm tt n u cng T
i
+ (n - i) div 4. Ta dng con s ny
nh gi nhnh cn, nu n nhiu hn s k t "C" trong Cu hnh ti u th chc chn c lm
tip cng ch c mt cu hnh ti t hn, ta b qua ngay cch chn ny v th phng n khc.

Cc bn tham kho Code:

program ABC_STRING;
const
InputFile = 'ABC.INP';
OutputFile = 'ABC.OUT';
max = 100;
var
N, MinC: Integer;
X, Best: array[1..max] of 'A'..'C';
T: array[0..max] of Integer;
f: Text;

function Same(i, l: Integer): Boolean;
var
j, k: Integer;
begin
j := i - l;
for k := 0 to l - 1 do
if X[i - k] <> X[j - k] then
begin
Same := False; Exit;
end;
Same := True;
end;

function Check(i: Integer): Boolean;
var
l: Integer;
begin
for l := 1 to i div 2 do
if Same(i, l) then
begin
Check := False; Exit;
end;
Check := True;
end;

procedure KeepResult;
begin
MinC := T[N];
Best := X;
end;

procedure Try(i: Integer);
var
j: 'A'..'C';
begin
for j := 'A' to 'C' do
begin
X[i] := j;
if Check(i) then
begin
if j = 'C' then T[i] := T[i - 1] + 1
else T[i] := T[i - 1];
if T[i] + (N - i) div 4 < MinC then
if i = N then KeepResult
else Try(i + 1);
end;
end;
end;

procedure PrintResult;
var
i: Integer;
begin
for i := 1 to N do Write(f, Best[i]);
WriteLn(f);
WriteLn(f, '"C" Letter Count : ', MinC);
end;

begin
Assign(f, InputFile); Reset(f);
ReadLn(f, N);
Close(f);
Assign(f, OutputFile); Rewrite(f);
T[0] := 0;
MinC := N;
Try(1);
PrintResult;
Close(f);
end.

3. BI TON NGI DU LCH
Cho n thnh ph nh s t 1 n n v m tuyn ng giao thng hai chiu gia chng, mng
li giao thng ny c cho bi bng C cp nxn, y C
ij
= C
ji
= Chi ph i on ng trc tip
t thnh ph i n thnh ph j. Gi thit rng C
ii
= 0 vi i, C
ij
= + nu khng c ng trc
tip t thnh ph i n thnh ph j.
Mt ngi du lch xut pht t thnh ph 1, mun i thm tt c cc thnh ph cn li mi thnh
ph ng 1 ln v cui cng quay li thnh ph 1. Hy ch ra cho ngi hnh trnh vi chi ph t
nht. Bi ton gi l bi ton ngi du lch hay bi ton hnh trnh ca mt thng gia
(Traveling Salesman)
1 2
3 4
1
2
1
3
4
2
Hng dn:
Hnh trnh cn tm c dng (x
1
= 1, x
2
, , x
n
, x
n+1
= 1) y gia x
i
v x
i+1
: hai thnh ph lin
tip trong hnh trnh phi c ng i trc tip (C
ij
+ ) v ngoi tr thnh ph 1, khng thnh
ph no c lp li hai ln. C ngha l dy (x
1
, x
2
, , x
n
) lp thnh 1 hon v ca (1, 2, , n).
Duyt quay lui: x
2
c th chn mt trong cc thnh ph m x
1
c ng i ti (trc tip), vi mi
cch th chn x
2
nh vy th x
3
c th chn mt trong cc thnh ph m x
2
c ng i ti (ngoi
x
1
). Tng qut: x
i
c th chn 1 trong cc thnh ph cha i qua m t x
i-1
c ng i trc
tip ti (1 i n).

Nhnh cn: Khi to cu hnh BestConfig c chi ph = + . Vi mi bc th chn x
i
xem chi ph
ng i cho ti lc c < Chi ph ca cu hnh BestConfig?, nu khng nh hn th th gi tr
khc ngay bi c i tip cng ch tn thm. Khi th c mt gi tr x
n
ta kim tra xem x
n
c
ng i trc tip v 1 khng ? Nu c nh gi chi ph i t thnh ph 1 n thnh ph x
n
cng
vi chi ph t x
n
i trc tip v 1, nu nh hn chi ph ca ng i BestConfig th cp nht li
BestConfig bng cch i mi.
Sau th tc tm kim quay lui m chi ph ca BestConfig vn bng + th c ngha l n khng tm
thy mt hnh trnh no tho mn iu kin bi cp nht BestConfig, bi ton khng c li
gii, cn nu chi ph ca BestConfig < + th in ra cu hnh BestConfig - l hnh trnh t tn
km nht tm c

Input: file vn bn TOURISM.INP
Dng 1: Cha s thnh ph n (1 n 20) v s tuyn ng m trong mng li giao
thng
m dng tip theo, mi dng ghi s hiu hai thnh ph c ng i trc tip v chi ph i
trn qung ng (chi ph ny l s nguyn dng 100)
Output: file vn bn TOURISM.OUT, ghi hnh trnh tm c.














TOURISM.INP
4 6
1 2 3
1 3 2
1 4 1
2 3 1
2 4 2
3 4 4
TOURISM.OUT
1->3->2->4->1
Cost: 6


Cc bn tham kho Code:


program TravellingSalesman;
const
InputFile = 'TOURISM.INP';
OutputFile = 'TOURISM.OUT';
max = 20;
maxC = maxlongint div 2;
var
C: array[1..max, 1..max] of longint;
X, BestWay: array[1..max + 1] of longint;
T: array[1..max + 1] of longint;
Free: array[1..max] of Boolean;
m, n: longint;
MinSpending: longint;

procedure Enter;
var
i, j, k: longint;
f: Text;
begin
Assign(f, InputFile); Reset(f);
ReadLn(f, n, m);
for i := 1 to n do
for j := 1 to n do
if i = j then C[i, j] := 0 else C[i, j] := maxC;
for k := 1 to m do
begin
ReadLn(f, i, j, C[i, j]);
C[j, i] := C[i, j];
end;
Close(f);
end;

procedure Init;
begin
FillChar(Free, n, True);
Free[1] := False;
X[1] := 1;
T[1] := 0;
MinSpending := maxC;
end;
procedure Try(i: longint);
var
j: longint;
begin
for j := 2 to n do
if Free[j] then
begin
X[i] := j;
T[i] := T[i - 1] + C[x[i - 1], j];
if T[i] < MinSpending then
if i < n then
begin
Free[j] := False;
Try(i + 1);
Free[j] := True;
end
else
if T[n] + C[x[n], 1] < MinSpending then
begin
BestWay := X;
MinSpending := T[n] + C[x[n], 1];
end;
end;
end;

procedure PrintResult;
var
i: longint;
f: Text;
begin
Assign(f, OutputFile); Rewrite(f);
if MinSpending = maxC then WriteLn(f, 'NO SOLUTION')
else
for i := 1 to n do Write(f, BestWay[i], '->');
WriteLn(f, 1);
WriteLn(f, 'Cost: ', MinSpending);
Close(f);
end;

begin
Enter;
Init;
Try(2);
PrintResult;
end.
4. Tour du lch ca Sherry ( http://vn.spoj.pl/problems/LEM3 )
Trong k ngh h nm nay sherry c b thng cho 1 tour du lch quanh N t nc ti p vi
nhiu thng cnh ni ting ( v sherry rt ngoan ). Tt nhin sherry s i bng my bay.
Gi v my bay t t nc i n t nc j l C
ij
( d nhin C
ij
c th khc C
ji
). Tuy c b
thng cho nhiu tin i du lch nhng sherry cng mun tm cho mnh 1 hnh trnh vi chi ph
r nht c th dnh tin mua qu v tng mi ngi ( Cc chuyn bay ca sherry u c
m bo an ton tuyt i ).
Bn hy gip sherry tm 1 hnh trnh i qua tt c cc nc, mi nc ng 1 ln sao cho chi ph
l b nht nh.
Input

Dng 1: N (5 < N < 16)
Dng th i trong N dng tip theo: Gm N s nguyn, s th j l C
ij
(0 < C
ij
< 10001)

Output
Gm 1 dng duy nht ghi chi ph b nht tm c

Example










5. Chm im ( http://vn.spoj.pl/problems/V8SCORE )
C N v gim kho trong k thi chn i tuyn tin hc. K thi bao gm K bi. V gim kho th i
ngh s im ca bi j l A
ij
.
Hi ng gim kho mun xc nh s im cho mi bi sao cho:
Tng s im bng S.
im ca mi bi khng b hn im ca bi trc .
S im ca mi bi bng im ngh cho bi ny ca mt v gim kho no .
D liu
Dng u tin cha ba s nguyn S (1 S 200), (1 K 20), (1 N 20).
Dng th i trong s N dng tip theo cha K s nguyn, s th j cho bit gi tr A
ij
l s
im v gim kho th i ngh cho bi th j.
Kt qa
Nu tn ti mt cch cho im tha mn yu cu:
o Dng th nht: in ra 'YES'.
o Dng th hai: in ra K s nguyn l im ca mi bi tm c.
Nu khng tn ti cch cho im, in ra 'NO'.
Input: Output:
6
0 1 2 1 3 4
5 0 3 2 3 4
4 1 0 2 1 2
4 2 5 0 4 3
2 5 3 5 0 2
5 4 3 3 1 0

8

V d







Hng dn:
Kt qu ca bi ton (nu c) s c dng X
1
X
2
X
k
. Trong mi bc duyt, ta s th chn X
i
trong
tp A
ji
(1 <= j <= n). Sau khi chn X
i
, ta c th nh gi c S
min
(tng im b nht c th t
c khi duyt xong) bng d kin dy X tng dn.

S
min
(tng im khi chn xong) = P[i] + X[i] * (k-i) vi P[i] l tng im c
- S
min
<= S : duyt tip bi ton vn c th c nghim
- S
min
> S : v nghim
cng chnh l cn trong qu trnh duyt chng trnh c th chy trong thi gian cho php!

6. Hon v ch ci ( http://vn.spoj.pl/problems/QBHV )
Cho mt xu S ch gm cc ch ci in hoa, 1 <= di <= 9.
Yu cu:
1: C bao nhiu cch hon v cc ch ci ca xu S
2: Lit k cc hon v theo th t t in
Input
Gm 1 dng duy nht cha xu S
Output
Dng 1: Ghi s lng hon v tm c (K)
K dng tip theo, mi dng ghi mt xu hon v ca xu S theo ng th t t in
Example
Input:
ABAB
Output:
6
AABB
ABAB
ABBA
BAAB
BABA
BBAA
D liu Kt qu
100 3 2
30 20 40
50 30 50
YES
30 30 40
100 2 3
1 1
2 2
3 3
NO
Hng dn:
Hai yu cu cn gii quyt ca bi ton ny chnh l s lng cu hnh tha mn v lit k
cc cu hnh . Nu nh duyt 2 ln, ln th nht m s lng v ln th 2 lit
k cc cu hnh th chng trnh s chy qu thi gian cho php. Bi th, ta nn tm cch
m s cu hnh m khng cn phi duyt quay lui.
Cng thc: Result = N! div (Count[ch])
vi N l di ca S v Count[ch] l s ln xut hin ca k t "ch".

7. Quan h ( http://vn.spoj.pl/problems/COND )
Xt mt tp N i tng c th so snh c (2<=n<=10). Gia 2 i tng a v b c th tn ti
1 trong 3 quan h phn loi:
a = b; a < b; a > b;
Nh vy, vi 3 i tng (a, b, c) c th tn ti 13 quan h phn loi nh sau:
a = b = c; a = b < c; c < a = b; a < b = c
b = c < a; a = c < b; b < a = c; a < b < c
a < c < b; b < a < c; b < c < a; c < a < b
c < b < a;
Cho s n, hy xc nh s lng quan h phn loi khc nhau.
Input
Gm nhiu s n. Mi s trn 1 dng. Kt thc file l -1.
Output
Vi mi n, a ra s lng quan h phn loi tm c, mi s trn 1 dng (khng c dng
trng).
Example
Input:
2
3
-1
Output:
3
13

Hng dn:
Bi ny l mt bi ton m t hp. Bn nhn xt mt quan h phn loi s c dng
( = = ) < ( = = ) < ... < ( = = )
tc l chia thnh cc nhm bng nhau
Gi s c k nhm v gi s phn t trong mi nhm l a1, a2, ..., ak.
iu kin: a1 + a2 + ... + ak <= n
Th th s quan h phn loi loi ny bng: n! / (a1! * a2! * a3! * ... * ak!)
Tm li cng thc cui cng bng:
Sum ( n! / (a1! * a2! * ... * ak!) | a1 + a2 + ... + ak <= n)

8. Quan h c iu kin (http://vn.spoj.pl/problems/QBCOND )
Ngy nay khi nghin cu quan h gia cc phn t cc nh khoa hc khng n gin ch nghin
cu cc quan h bnh thng m thm phn phc tp l thm vo 1 vi b iu kin. Mt
trong nhng iu kin l s quan h '='
Nh ta bit gia 2 phn t a, b s c 3 quan h:
a = b, a > b, a < b.
Cc nh khoa hc a ra 1 b gm n phn t. Sau khi tm ra s lng cc quan h ca n phn t
ny h mun bit nu nh s quan h '=' trong tp n phn t ny ng bng k th s c bao
nhiu quan h nh th?
Input
Gm nhiu b s n, k. Mi b s trn 1 dng. Kt thc file l -1. ( 1 < n < 11 )
Output
Vi mi b s (n, k) a ra s quan h c iu kin tm c
Example
Input:
3 0
3 1
3 2
3 3
-1

Output:
6
6
0
1

Gii thch:
Vi b 3 phn t (a, b, c).
n=3, k=0:
a < b < c; a < c < b; b < a < c;
b < c < a; c < a < b; c < b < a;

n=3, k=1:
a = b < c; c < a = b; a < b = c
b = c < a; a = c < b; b < a = c;

n=3, k=3:
a = b = c;
CC THAO TC X L BIT

Di y l nhng kin thc v vic s dng cc php ton logic t gip cho vic thit k cc
biu thc logic dng rt nhiu trong cc php ton iu kin c nhanh chng, chnh xc, hiu
qu.

* Quy c v v tr ca cc bit:
Mi byte bao gm 8 bit c m s t phi sang tri cn gi l bit thp n bit cao. Bit nm bn
phi c xem l thp hn bit nm bn tri. Cc bit c nh s nh sau: 7 6 5 4 3 2 1 0
Mi bit c th nhn 1 trong 2 gi tr l 0 hoc 1. Ti mi thi im thc hin chng trnh mi bit
c nhn gi tr xc nh. Mi s nguyn trong my u biu din di dng nh phn, th d s
19 c biu din nh sau:
Bit 7 6 5 4 3 2 1 0
Gi tr 0 0 0 1 0 0 1 1 (s 19)

* Cc php ton logic
Cc php ton sau y thc hin trn cc gi tr nguyn v cho kt qu l cc gi tr nguyn.

1. Php o bit NOT: i gi tr ca mi bit t 0 thnh 1 v ngc li.

2. Php cng logic trn cc bit OR thc hin trn tng cp bit tng ng ca cc ton hng
theo bng cng sau:






Quy tc: Tng hai bit bng 0 khi v ch khi c hai bit bng 0 ngoi ra tng nhn gi tr 1. Php OR
cn c gi l php hoc.

3. Php nhn logic trn cc bit AND: thc hin trn tng cp bit tng ng ca cc ton hng
theo bng nhn sau:






Quy tc: Tch hai bit bng 1 khi v ch khi c hai bit bng 1, ngoi ra tch nhn gi tr 0. Php AND
cn c gi l php v.
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
4. Php cng loi tr trn cc bit (XOR) : thc hin trn tng cp bit tng ng ca cc ton
hng theo bng sau






Quy tc: Tng loi tr ca hai bit bng 1 khi v ch khi hai bit cha cc gi tr khc nhau, ngoi
ra tng loi tr nhn gi tr 0.
Php ton trn cng cn c gi l php so snh khc (khc nhau l ng, bng nhau l sai) hay
cn gi l php trit tiu.


x SHR i : Php dch phi, cho gi tr c c t s nguyn x sau khi dch sang phi i bit.
x SHL i : Php dch tri, cho gi tr c c t s nguyn x sau khi dch sang tri i bit.

Vi x = 2 ta c:
Trn y l mt s php ton lm vic trn cc bit m ta hay dng, trn c s , ta xy dng
c mt s hm, th tc hay dng sau.

1. Hm ly gi tr bit: Hm tr v gi tr 0 hoc 1
Function GetBit(x, i:longint):longint;
Begin
GetBit:=(x SHR i) and 1;
End;

2. Th tc bt bit: Th tc gn tr 1 cho bit th i trong s nguyn x.
Procedure OnBit(Var x:longint; i:longint);
Begin
x:=x OR (1 SHL i);
End;

3. Th tc tt bit: Th tc gn tr 1 cho bit th i trong s nguyn x.
Procedure OffBit(Var x:longint; i:longint);
Begin
x:=x AND (NOT(1 SHL i));
End;


Chng ta xt qua cc bi ton sau tm hiu v ng dng ca x l bit.
A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0
1. S c bit:
Xt mt dy gm N s nguyn A
1
, A
2
, A
3
, ... A
n
. Trong dy s trn c 1 s ch xut hin ng mt
ln, v cc s cn li xut hin mt s chn ln.
Yu cu: Hy tm s c bit ca mt dy cho trc.
D liu: Trong file vn bn SDB gm:
- Dng u l s N (N 10
7
)
- N dng tip, dng th i l A
i
vi |A
i
| 10
9
.
Kt qu: Mt dng duy nht l s cn tm.
V d:






Hng dn: Ln lt thc hin php XOR s th 1 vi s th 2, ly kt qu thc hin vi s th
3 v c th cho ht N s. V php XOR l php trit tiu, do kt qu cui cng l s ch xut
hin 1 ln (khng b trit tiu). Bng cch biu din cc s di dng nh phn ri thc hin php
XOR, cc bn c th d dng chng minh c thut ton trn l ng n.

res := 0;
For i := 1 to N do
begin
read(fi, a);
res := res xor a;
end;
writeln(fo, res);

2. Xu c lp:
Cho trc N (N 10000) xu k t di khng qu 255 k t. Xu c lp c nh ngha l xu
ch xut hin duy nht 1 ln trong N xu cho, cc xu cn li lun xut hin mt s chn ln.

Yu cu: Tm xu c lp t N xu cho.
D liu: Trong file vn bn SINGLE.INP gm
N dng biu din N xu cho ban u.
Kt qu: Mt dng duy nht l xu c lp.
V d:


Hng dn: Cch lm tng t vi bi S c bit, ta thc hin php XOR vi cc m ASCII.
SDB.INP SDB.OUT
5
2
1
2
3
3
1
SINGLE.INP SINGLE.OUT
- Hello, sir .
- Go away!
- Can I help you?
- Hello, sir.
- Can I help you?
- Go away!
3. Lit k tp con:
Cho tp hp gm N phn t ( 1 N 20 ) Hy lit k tt c cc tp con (k c rng) ca tp hp
cho.

Hng dn: Xem nh N phn t l dy N bit. Ta c th biu din tt c cc tp con bng dy N
bit, gi tr 1 (hoc 0) biu din s tn ti (hoc khng tn ti) ca mi phn t. Gi tr dy bit
tng ng t 0 .. 2
n
- 1. kim tra s tn ti ca 1 phn t trong dy bit c gi tr x, ta s dng
hm GetBit nh nu trn. y l 1 bi ton rt c bn, cc bn c th t code.






























DUYT BNG CCH CHIA I TP HP
1. Tng vector ( http://vn.spoj.pl/problems/VECTOR )
Trong mt phng ta c N vc t. Mi mt vc t c cho bi hai ch s x v y. Tng ca hai
vc t (x
i
, y
i
) v (x
j
, y
j
) c nh ngha l mt vc t (x
i
+ x
j
, y
i
+ y
j
). Bi ton t ra l cn chn
mt s vc t trong N vc t cho sao cho tng ca cc vec t l vc t (U, V).
Yu cu: m s cch chn tho mn yu cu bi ton t ra trn.
Input
Dng th nht ghi s N (0 N 30).
N dng tip theo, dng th i ghi cc s nguyn x
i
, y
i
ln lt l hai ch s ca vc t th i.
(|x
i
|, |y
i
| 100).
Dng cui cng ghi s hai s nguyn U V (|U|, |V| 10
9
).
Output
Gm mt s duy nht l s cch chn tho mn.
Example
Input:
4
0 0
-1 2
2 5
3 3
2 5

Output:
4

Hng dn: Nu duyt t hp ca N vector th phc tp ca thut ton l 2^N v chng
trnh s khng cho kt qu trong thi gian cho php vi c N 32. Cch gii quyt nh sau:
- Chia tp N vector thnh 2 tp bng nhau A v B.
- Gi F[x, y] l s cch chn c vector tng (x, y) trn tp A. tnh F[x, y] th ta s duyt tt
c cc tp con ca tp A, sau khi tnh c vector tng ca mi tp con ta ch vic inc(F[x, y]).
- Tng t ta s duyt trn tp B, sau khi tnh c vector tng (x1, y1) ca mi tp con ta s
inc(Res, F[U - x1, V - y1]) vi Res l kt qu ca bi ton.
Vic duyt tp con ca tp A, B c th ci t nh bi ton phn trc nhc ti!

2. 34 ng xu ( http://vn.spoj.pl/problems/COIN34 )
Bn c 34 ng xu c gi tr nh sau:
xu [1] c gi tr 2
xu [2] c gi tr 3
xu [3] c gi tr 5

for n := 4 to 34 do
xu [n] c gi tr (xu[n-1] + xu[n-2] + xu[n-3])
Bn hy dng nhiu ng xu nht mua mt mn hng c gi l X
D liu
Dng u tin l s test (khng qu 1000). Mi dng tip theo cha mt s nguyn X (1 X
2000000000).
Kt qu
Vi mi test, in ra "Case #" + s hiu test + ": " + s lng ln nht ng xu cn dng. Nu
khng c cch no t gi tr X th in ra -1.
V d
D liu
4
1
5
8
9

Kt qu
Case #1: -1
Case #2: 2
Case #3: 2
Case #4: -1

Hng dn: Gi T[i] l s ng xu nhiu nht c th mua mn hang c gi tr l i. Trong mi
bc duyt tp th 2, ta tin hnh cp nht T[i]: T[i] := Max(T[i], F[i - x] + y) vi x l
khi lng tp hp con, y l s lng xu ca tp. Mng F c ngha tng t T v c tnh
trc bc 1.

3. Nh hng Trung Quc ( http://vn.spoj.pl/problems/CHNREST )
Hng nm v mun c khng kh m cng v cng tit kim nn bn thng t chc sinh nht
nh. Tuy nhin trc sinh nht nm nay vi hm bn thi u vo i tuyn tin hc quc gia.
y l mt s kin c bit c ngha nn bn quyt nh mng ngy sinh nht ca mnh ti mt
nh hng Trung Quc sang trng v bn t nh ln ny nht nh phi tiu xi rng tay hn. Mi
vic chun b gn xong nhng cn mt vn lm bn kh nhc u, l lm sao chn c
nhng mn n m mi ngi cng thch.
Nh hng c M mn n khc nhau v th v ch l mi mn n rt nhiu nn c th cho bao
nhiu ngi cng c, v th vn l gi mn no ch khng phi mi mn gi bao nhiu. C
tt c N ngi n d tic sinh nht (bao gm c bn trong ). Bn tm hiu c danh sch
nhng mn n yu thch ca tng ngi v bn mun rng i vi mi ngi phi c t nht 2
mn m h thch. Tuy nhin sau khi n xong cn nhiu tit mc hp dn khc nn bn cng mun
rng bt k ai cng khng c qu 2 mn n yu thch trong danh sch c t trc. V vn
cui cng, y l tin ca b m nn cng khng nn tiu xi qu ng.
Yu cu
Hy cho bit s tin t nht phi tr gi mt thc n tha mn cc yu cu trn.
D liu
- Dng u tin cha hai s M, N
- Dng th hai cha M s P
i
l gi ca mn th i.
- Trong N dng cui cng, dng th k ghi danh sch cc mn yu thch ca ngi th k.
Kt qu
- Gm mt s duy nht l kt qu ca bi ton, hoc
- in ra -1 nu khng c cch gi mn no tha mn.
V d
D liu:
5 3
100 150 300 425 200
1 2 4
1 3 4 5
1 4 5

Kt qu:
450
Gii hn
- M 30.
- N 10.

Hng dn: Theo ra th mi ngi thch ng 2 mn trong thc n c chn. Duyt vi m
div 2 mn, vi mi t hp ta c dy A
1
, A
2
, A
3
, ..., A
n
l s cc mn yu thch ca N ngi. Tng
t vi ln th 2 l B
1
, B
2
, B
3
, ..., B
n
. (Vi A
i
, B
i
<= 2 v A
i
+ B
i
= 2). Chng ta tm cch m ha dy
A, B thnh s t nhin tin cho vic lu tr v tnh ton.

4. Phn tp ( http://vn.spoj.pl/problems/LQDDIV )
Cho N ngi(2N32) ,mi ngi c mt s a
i
(1 a
i
10
9
) c gi l tin cy
Cn phn chia n ngi ny vo 2 tp sao cho:
- Mi ngi thuc ng mt tp
- Chnh lch tng tin cy ca 2 phn l b nht
Input
Dng u cha s nguyn N
Dng tip theo cha N s : s th i l tin cy ca ngi th i
Output

Ghi ra hai s u v v vi u l chnh lch nh nht v v l s cch phn chia

Example
Input:
5
1 5 6 7 8
Output:
1 3

Ch thch : chnh lch t nht ca 2 phn l 1
C 3 cch phn chia .3 cch phn chia nhm 1 l (3,5) ,(1,3,4) v (1,2,5)

Hng dn: T tng ca bi ton vn l chia i duyt. Ta s chn mt s ngi ln
duyt th nht v mt s ngi ln duyt th hai cho vo nhm 1.
Gi s tng tin cy ln duyt th nht l x, th hai l y, gi S l tng tin cy ca N ngi.
Tng tin cy ca nhm 1 trong TH ny l x + y, v ca nhm 2 l S - (x + y). chnh
lch to thnh l Abs(S - (x + y) - (x + y)) = Abs(S - 2*(x+y)). Cch gii quyt c th nh sau :

- Duyt N div 2 ngi, cc tng tin cy thu c lu vo mt mng C c ti a l 2
16
phn t.
tin cho tnh ton sau ny, ta s ti u mng bng cch loi b nhng tng bng nhau v ch
gi li mt, ng thi dng thm 1 mng m s ln xut hin ca tng (cn sp xp li
mng C trc khi ti u n). V d D[i] l s ln xut hin ca tng tin cy C[i].

- Duyt phn cn li, mi tng tin cy X sinh ra, ta s tm C[i] sao cho Abs(S - 2*(X+C[i])) nh
nht c th. Sau cp nht kt qu ti u. Tm kim nh phn gi tr C[i] s l rt hp l bi
mng C c sp xp v kch thc ca n cng kh ln.




























TM KIM NH PHN

Cc bn c th tham kho k thut tm kim nh phn cc ti liu khc. Trong ti liu ny, chng
ta s lt qua mt vi v d tht c bn cc bn c th hiu thm v n.

1. Ti trng ca tuyn ng
Mt h thng giao thng lin thng gm N thnh ph vi tn 1..N (N <= 100). C mt s on
ng hai chiu gia mt s cp thnh ph v mi on ng c mt ti trng ti a m ch c
cc xe vi ti trng khng ln hn mi i qua c.
Cn i t thnh ph U ti V. Hy tm mt hnh trnh sao cho ti trng ti a cho php trn hnh
trnh l ln nht c th c.

D liu : Trong file vn bn TAITRONG.INP gm
Dng u l 3 s N, U, V
Tip theo l mt s dng, mi dng ghi ba s nguyn dng X Y Z vi ngha c ng i
gia X v Y vi ti trng ti a cho php l Z (0 < Z <= 10000).

Kt qu : Ra file vn bn TAITRONG.OUT gm
Dng th nht ghi ti trng H ti a ca xe c th.
Trong cc dng tip, mi dng ghi tn mt thnh ph trong hnh trnh t U kt thc ti V.

V d :






Hng dn:
t H
min
= Min(a[i, j]), H
max
= Max(a[i, j]). Vi mi gi tr h ( H
min
h H
max
) ta xy dng th
G(h) tha mn: - N nh tng ng vi N thnh ph.
- 2 nh i, j c cnh ni nu a[i, j] h.
Nh vy, nu ta tm thy c mt ng i t U ti V th ta ni rng : "Mng giao thng c ti
trng ti thiu h". Bi ton tr thnh "Tm gi tr h ln nht tn ti ng i t U ti V".
Ta s s dng k thut tm kim nh phn da theo nhn xt: Nu mng c ti trng ti thiu k,
v h l gi tr ln nht "mng giao thng c ti trng ti thiu h" th k h H
max
. Ngc li,
nu khng c l trnh vi ti trng ti thiu l k th H
min
h < k.
Vi mi gi tr h, c th duyt DFS hoc BFS kim tra tn ti ng i t U ti V hay khng.
TAITRONG.INP TAITRONG.OUT
4 1 4
1 2 10
2 4 1
1 3 5
3 4 3
3
1
3
4
2. B su tp cc ng xu ( http://vn.spoj.pl/problems/LEM1/ )
Cho N ng xu c bn knh ln lt l cc s thc dng r
1
.. r
N
. c t xung quanh mt vng
trn sao cho:
Mi ng xu tip xc vi 2 ng xu
t cnh n v tip xc vi vng trn.
Bit c bn knh ca tng ng xu.
Yu cu: Tm bn knh vng trn.
Input
Dng u ghi s nguyn dng N
Dng tip theo ghi N s r
i
( 1 i N )

Output
Gm 1 dng duy nht ghi bn knh hnh trn ( chnh xc n 3 ch s sau du phy )

Example

Input:
4
2 2 2 2

Output:
0.828

Gii hn
1 N 10000
1 r
i
100000

Hng dn:
Gi O l tm ca ng trn bn knh R, O
1
, O
2
, O
3
, ... O
n
l tm ca cc ng trn bn knh
tng ng R
1
, R
2
, R
3
, ... R
n
.
Khi R tha mn yu cu, ta c: O
1
OO
2
+ O
2
OO
3
+ O
3
OO
4
+ ... + O
n-1
OO
n
= 2pi (*)
D dng tnh c cc gc ny theo di 3 cnh ca cc tam gic tng ng. tm R tha
mn, ta s chia nh phn gi tr ca R vi R
min
= 0 v R
max
= tng cc R
i
. Gi tr R tha mn (*)
chnh l nghim ca bi ton.
Ch x l d liu trnh vic sai s kh ln khi lm vic vi s thc.
R
R
1

R2
R
3

R4
R5
R6
QUY HOCH NG

Quy hoch ng l dng bi ton kh ph bin trong cc k thi HSG mn Tin hc. Mc ch ca
chng l gii quyt cc bi ton ti u. V khng c mt thut ton tng qut gii tt c cc bi
ton quy hoch ng, do cc v d sau y gip cc bn lm quen v tip cn mt s dng
ton quy hoch ng.

1. i xem phim ( http://vn.spoj.pl/problems/VCOWFLIX )
Nng dn John ang a cc con b ca anh ta i xem phim! Xe ti ca anh ta th c sc cha c
hn thi, l C (100 <= C <= 5000) kg, anh ta mun a 1 s con b i xem phim sao cho tng
khi lng ca ng b ny l ln nht, ng thi xe ti ca anh ta vn chu c.
Cho N (1 <= N <= 16) con b v khi lng W_i ca tng con, hy cho bit khi lng b ln
nht m John c th a i xem phim l bao nhiu.
D liu
Dng 1: 2 s nguyn cch nhau bi du cch: C v N
Dng 2..N+1: Dng i+1 cha 1 s nguyn: W_i
Kt qu
Dng 1: Mt s nguyn l tng khi lng b ln nht m John c th mang i xem phim.
V d
D liu
259 5
81
58
42
33
61

Kt qu
242

Gii thch
81+58+42+61 = 242; y l tng khi lng b ln nht c th c.

Hng dn: S dng mng F : boolean vi ngha F[i] = true nu c cch chn cc con b
c khi lng l i v ngc li.

F[0] := true;
For i := 1 to n do
For j := C downto w[i] do
F[j] := F[j] or (F[j - w[i]]);

For i := C downto 0 do
if F[i] then // cch chn ti u nht!
begin
writeln(fo, i);
exit;
end;
Hy t kim tra li xem vng for th 2 l for downto ch khng phi l for to.
2. Bc thang ( http://vn.spoj.pl/problems/VSTEPS )
Bm chi tr chi in t Lucky Luke n mn phi iu khin Lucky leo ln mt cu thang gm n
bc.

Cc bc thang c nh s t 1 n n t di ln trn. Lucky c th i ln mt bc thang, hoc
nhy mt bc ln hai bc thang. Tuy nhin mt s bc thang b thng do c k v Lucky
khng th bc chn ln c. Bit ban u, Lucky ng bc thang s 1 (bc thang s 1 khng
bao gi b thng).

Chi n y, Bm cht ny ra cu hi: c bao nhiu cch Lucky leo ht c cu thang?
(ngha l leo n bc thang th n). Bm mun nh bn tr li cu hi ny.
D liu
Dng u tin: gm 2 s nguyn n v k, l s bc ca cu thang v s bc thang b hng
(0 k < n 100000).
Dng th hai: gm k s nguyn cho bit ch s ca cc bc thang b hng theo th t tng
dn.
Kt qu
In ra phn d ca s cch Lucky leo ht cu thang khi chia cho 14062008.
V d
D liu
4 2
2 3

Kt qa
0

D liu
90000 1
49000

Kt qa
4108266

Hng dn: Gi F[i] l s cch ti c bc thang th i. Ta d dng tm ra cng thc QH l
F[i] := F[i-1] + F[i-2]. phc tp O(n).

3. Xp hng mua v ( http://vn.spoj.pl/problems/NKTICK )
C N ngi sp hng mua v d bui ho nhc. Ta nh s h t 1 n N theo th t ng trong
hng. Mi ngi cn mua mt v, song ngi bn v c php bn cho mi ngi ti a hai v.
V th, mt s ngi c th ri hng v nh ngi ng trc mnh mua h v. Bit t
i
l thi gian
cn thit ngi i mua xong v cho mnh. Nu ngi i+1 ri khi hng v nh ngi i mua h v
th thi gian ngi th i mua c v cho c hai ngi l r
i
.
Yu cu: Xc nh xem nhng ngi no cn ri khi hng v nh ngi ng trc mua h v
tng thi gian phc v bn v l nh nht.
D liu
Dng u tin cha s N (1 N 60000).
Dng th 2 ghi N s nguyn dng t
1
, t
2
, ..., t
N
. (1 t
i
30000)
Dng th ba ghi N-1 s nguyn dng r
1
, r
2
, ..., r
N-1
. (1 r
i
30000)
Kt qa
In ra tng thi gian phc v nh nht.
V d
D liu:
5
2 5 7 8 4
4 9 10 10

Kt qa
18

D liu:
4
5 7 8 4
50 50 50

Kt qa
24

Hng dn: Gi F[i] l thi gian t nht i ngi u tin mua v xong.
Ta c cng thc QH F[i] := Max(F[i-1] + T[i], F[i-2] + R[i-1]).
phc tp O(n).

4. Ni mng ( http://vn.spoj.pl/problems/NKCABLE )
Cc hc sinh khi n thc tp trong phng my tnh thng hay chi tr chi in t trn mng.
ngn nga, ngi trc phng my ngt tt c cc my tnh ra khi mng v xp chng
thnh mt dy trn mt ci bn di v gn cht my xung mt bn ri nh s th t cc my
t 1 n N theo chiu t tri sang phi. Cc hc sinh tinh nghch khng chu thua, h quyt
nh tm cch ni cc my trn bn bi cc on dy ni sao cho mi my c ni vi t nht mt
my khc. tin hnh cng vic ny, h o khong cch gia hai my lin tip. Bn hy gip
cc hc sinh ny tm cch ni mng tho mn yu cu t ra sao cho tng di cp ni phi s
dng l t nht.

D liu
Dng u tin cha s lng my N (1 N 25000).
Dng th i trong s N-1 dng tip theo cha cc khong cch t my i n my i+1
(i=1,2,...,N-1). Gi thit rng khong cch t my 1 n my N khng vt qu 10
6
.
Kt qu
Ghi ra di ca cp ni cn s dng.
V d
D liu:
6
2
2
3
2
2

Kt qa
7

Hng dn: Gi F[i] l di ca cch ni mng ngn nht xt t my 1 ... i.
Ta c F[i] := Min(F[i-2], F[i-1]) + L[i-1];
Thi gian O(n)

5. Mua v tu ha ( http://vn.spoj.pl/problems/QBTICKET )
Tuyn ng st t thnh ph A n thnh ph B i qua mt s nh ga. Tuyn ng c th biu
din bi mt on thng, cc nh ga l cc im trn . Tuyn ng bt u t A v kt thc
B, v th cc nh ga s c nh s bt u t A (c s hiu l 1) v B l nh ga cui cng.
Gi v i li gia hai nh ga ch ph thuc vo khong cch gia chng. Cch tnh gi v nh sau:
Khong cch gia hai nh ga (X)
Khong cch 0 < X <= L1 -> Gi v C1
Khong cch 0 < X <= L2 -> Gi v C2
Khong cch 0 < X <= L3 -> Gi v C3
Ngha l vi cc gi v C1, C2, C3 tng ng bn s i qung ng ti a l L1, L2, L3.

V i thng t nh ga ny n nh ga khc ch c th t mua nu khong cch gia chng
khng vt qu L3. V th nhiu khi i t nh ga ny n nh ga khc ta phi t mua mt s
v. Hn th na, nhn vin ng st yu cu hnh khch ch c gi ng mt v khi i trn
tu v v s b hu khi hnh khch xung tu.
Yu cu: Tm cch t mua v i li gia hai nh ga cho trc vi chi ph mua v l nh nht
Input
Dng u tin ghi cc s nguyn L1, L2, L3, C1, C2, C3 (1 <= L1 <= L2 <= L3 <= 10
9
; 1 <= C1
<= C2 <= C3 <= 10
9
) theo ng th t lit k trn.
Dng th hai cha s lng nh ga N ( 2 <= N <= 100000 )
Dng th ba ghi hai s nguyn s, f l cc ch s ca hai nh ga cn tm cch t mua v vi chi
ph nh nht i li gia chng.
Dng th i trong s N - 1 dng tip theo ghi s nguyn l khong cch t nh ga A (ga 1) n nh
ga th i + 1.
Output
Gm 1 dng duy nht ghi chi ph nh nht tm c
Example
Input:
3 6 8 20 30 40
7
2 6
3
7
8
13
15
23

Output:
70

Hng dn: Gi F[i] l chi ph t nht i n ga i trn chng t s n f.
Ta c F[i] := Min( F[i], F[j] + Chi ph t j -> i )
Ch : Ci t kho lo trnh TLE (Time Limit Exceeded)

6. Do chi bng xe but ( http://vn.spoj.pl/problems/KMBUS )
Mt tuyn ng thnh ph c cc bn xe bus tng km tuyn ng. Mi ln qua bn, xe u
n khch. Mi bn u c im xut pht. Mt xe ch chy khng qu B km k t im
xut pht ca n. Hnh khch khi i xe s phi tr tin cho di on ng m h ngi trn
xe. Cc ph cn tr i on ng di i l Ci(i=1,2..B). Mt du khch xut pht t 1 bn
no mun i do L km theo tuyn ni trn. Hi ng ta phi ln xung xe nh th no tng
s tin phi tr l nh nht c th.

D liu vo:

Dng u ghi 2 s nguyn dng B, L.
Dng th i trong s B dng tip theo ghi 1 s nguyn dng Ci ( 1 i B ).

Kt qa

Mt dng duy nht l s tin nh nht phi tr

Gii hn
0 B 100
0 L 10000
0 Ci 100

V d

D liu:
5 7
3
4
6
9
22
Kt qa
14
Hng dn: Gi F[i] l s tin t nht ngi phi tr khi i i km.
Ta c cng thc QH: F[i] := Min( F[i], F[i-j] + a[j]) vi j <= i

7. i tin ( http://vn.spoj.pl/problems/DTDOI )
Bn c cho mt tp hp cc mnh gi tin. Tp hp lun cha phn t mang ga tr 1. Mi
mnh gi c v hn cc ng tin mang mnh gi . Cho s tin S, hy tm cch i S thnh t
ng tin nht, sao cho mi ng tin c mnh gi thuc vo tp hp cho.
Input
D liu vo gm 2 dng:
Dng 1: Hai s nguyn dng N (s phn t ca tp hp mnh gi tin) v S (s tin cn
i) (1 N 100; 1 S 10
9
).
Dng 2: N s nguyn dng biu th mnh gi ca cc phn t trong tp hp (gi tr
khng vt qu 100).
Output
D liu ra gm mt s nguyn duy nht l s ng tin t nht c th i c.
Example
Input:
2 3
1 2

Output:
2

Hng dn: Vi S kh ln, ta s dng thut ton tham lam cho n khi S " nh" sau tin
hnh QH m bo cho kt qu chnh xc.

8. Hi trng ( http://vn.spoj.pl/problems/NKREZ )
Nh trng c mt phng hi trng. C nhng yu cu mun s dng phng hi trng ny,
mi yu cu cho bit thi im bt u v thi im kt thc. Nh trng c th chp nhn hoc
t chi i vi mt yu cu.
Yu cu: hy gip nh trng chn cc yu cu s dng hi trng sao cho tng thi gian hi
trng c s dng l ln nht.
D liu
Dng u tin cha mt s nguyn dng n (n 10000), s yu cu.
Mi dng trong s n dng tip theo cha 2 s nguyn dng p v k (0 p < k 30000), m t
mt yu cu bt u ti thi im p v kt thc ti thi im k.
Kt qu
Gm mt dng duy nht l tng thi gian ln nht m hi trng c s dng
V d
D liu:
12
1 2
3 5
0 4
6 8
7 13
4 6
9 10
9 12
11 14
15 19
14 16
18 20

Kt qa
16
Hng dn: - Sp xp N yu cu tng dn theo thi gian kt thc.
- Gi F[i] l tng thi gian s dng nhiu nht ca hi trng xt t yu cu 1 n i.
- Ta c F[i] := Max(F[i-1], F[j] + k[i] - p[i]) vi j l yu cu sao cho k[j] <= p[i] v k[j] ln
nht trong tt c cc yu khc tha mn iu kin .

9. Thang my v tr ( http://vn.spoj.pl/problems/ELEVATOR )
Nhng con b mun i vo v tr! Chng mun n c qu o bng cch xy mt kiu thang
my: mt ci thp khng l lm bng cc khi chng ln nhau. Chng c K (1 K 400) loi khi
c th xy thp. Mi khi loi i c chiu cao h_i (1 h_i 100) v c s lng c_i (1 c_i 10).
Do kh nng b ph hy bi cc tia v tr, khng c phn no ca khi loi i c th vt qua
cao a_i (1 a_i 40000).
Gip nhng con b xy thang my cao nht c th bng cch chng cc khi ln nhau theo lut
trn.
Input
* Dng 1: Mt s nguyn: K
* Dng 2..K+1: Mi dng cha 3 s nguyn c phn cch bi khong trng: h_i, a_i, v c_i.
Dng i+1 miu t loi khi i.
Output
* Dng 1: Mt s nguyn H, ch cao ln nht ca thp c th xy c.
Example
Input:
3
7 40 3
5 23 8
2 52 6

Output:
48

Gii thch: T di ln: 3 khi loi 2, 3 khi loi 1, 6 khi loi 3. Chng 4 khi loi 2 & 3 loi 1
khng hp l v nh ca khi loi 1 vt qu cao 40.
Hng dn: V khi loi i khng th vt qu chiu cao a[i] nn vi a[i] cng b th khi loi i
phi c xp cng thp. Ta s tin hnh sp xp h, a, c theo chiu tng dn ca a. Dng mng
F[i, j] : boolean vi ngha F[i, j] = true tc l ta dng i loi khi u tin v xy c thang
my c chiu cao l j.
Cch tnh F[i, j] nh sau:

-------------------------------------------------------------------------------
F[i, j] := (k = 0) or ((k > 0) and (F[i-1, k]); vi k = j - h[i] * t
t : s khi loi i em dng
-------------------------------------------------------------------------------


10. Rectangles Perimeter ( http://vn.spoj.pl/problems/MMAXPER )

.
).
)









INPUT

i.
= 1, 2, , n.
OUTPUT

:
Input
5
2 5
3 8
1 10
7 14
2 5
Output

68


.
5 + 6 + 3 + 7 + 10 + 13 + 7 + 12 + 5 = 68

11. Xu con lin tip i xng di nht
Cho mt xu S <= 1000 k t. Tm palindrome di nht l xu con ca S (xu con l mt dy cc
k t lin tip).

Hng dn:
y cng l mt bi c bn vi nhiu cch lm.
Cch 1: QH
Dng mng F[i, j] c ngha: F[i, j] = true/false nu on gm cc k t t i n j ca S c/khng
l palindrome.
Ta c cng thc l:
* F[i, i] = True
* F[i, j] = F[i+1, j-1]; ( nu s[i] = s[j] )
* F[i, j] = False; ( nu s[i] <> s[j] )
on chng trnh nh sau:

---------------------------------------------------------------
FillChar( F, sizeof(F), false );
for i := 1 to n do F[i, i] := True;
for k := 1 to (n-1) do
for i := 1 to (n-k) do
begin
j := i + k;
F[i, j] := ( F[i+1, j-1] ) and (s[i] = s[j] );
end;
----------------------------------------------------------------

Kt qu l : Max(j-i+1) <=j tha F[i, j] = True.
phc tp thut ton l 0(N
2
).

Cch 2: Duyt c cn.
Ta xt tng v tr i:
- xem a[i] c phi l tm ca Palindrome c l k t khng? (v d MADAM c tm l k t D)
- xem a[i] v a[i+1] c phi l tm ca Palindrome c chn k t khng?
( v d Palindrome ABBA c tm l 2 k t BB )
vi mi k t ta tm palindrome di nht nhn n l tm, cp nhp li kt qu khi duyt. Ta duyt
t gia ra dng kt qu hin ti lm cn.
on chng trnh nh sau:

procedure Lam;
var i, j : Longint ;
{ }
procedure try( first, last : Longint );
var : Longint;
Begin
if first = last then
begin
:= 1;
dec(first);
inc(last);
end
else := 0;
repeat
if (first < 1) or (last > N) then break;
if s[i] = s[j] then
begin
:= + 2;
first := first - 1;
last := last + 1;
end
else break;
until false;
if max < dd then max := dd;
End;
{ }

Begin
i := n div 2;
j := n div 2 + 1;
max := 1;
while (i > max div 2) and (j <= N-max div 2) do
begin
if i > max div 2 then
begin
try( i, i );
try( i, i+1 );
end;
if j <= N - max div 2 then
begin
try( j, j );
try( j, j+1 );
end;
i := i - 1;
j := j + 1;
end;
End;
-----------------------------------------------------------

Cch lm ny c phc tp: max*(N-max). V vy n chy nhanh hn cch QH trn, thi gian
chm nht khi max = N/2 cng ch mt N
2
/4 nhanh gp 4 ln cch dng QH. Nh vy, chng ta
bit l: khng phi lc no QH cng chp nhn c v mt thi gian v khng phi lc no
duyt lc no cng chm.

Bi trn cn c mt cch NlogN na l dng Suffix Aray, thm ch c cch O(N) l s dng Suffix
Tree v thut ton tm LCA. ng nhin cch ci t khng h d dng! Cc bn c th t tm
hiu!

12. Chia mt xu thnh t nht cc Palindrome ( di 1000 )
Bi ny phc tp hn bi trn, cch lm th vn l QH.
Gi F[i] l s palindrome t nht m on 1..j chia thnh c.
Ta c cng thc: F[i] = max( F[j] + 1; j < i tha mn : on j+1..i l palindrome)
on chng trnh nh sau:

F[0] := 0;
for i := 1 to n do
begin
for j := i-1 downto 0 do
if (on j+1..i l palindrome) then
F[i] := max( F[i], F[j]+1 );
end;

Hai vng for lng nhau mt O(N
2
), phn kim tra on j+1..i l palindrome hay khng mt O(N),
vy phc tp thut ton l O(N
3
). S khng c kh thi nu N = 1000. gim phc tp
thut ton, ta s dng mng L[i, j] c ngha tng t nh mng F[i, j] bi 1. QH lp mng
L[i, j] mt N
2
. Tng cng l O(N
2
) v mi ln kim tra ch mt O(1).
C th ci tin bng cch dng hai mng mt chiu L[i] v C[i] c ngha:
* L[i] l di ln nht ca palindrome di l nhn s[i] lm tm;
* C[i] l di ln nht ca palindrome di chn nhn s[i] v s[i+1] lm tm;
L[i] v C[i] c th tnh c bng cch 2 bi 2 trong O(N
2
). Phn kim tra ta vit li nh sau:

-------------------------------------------------------------
Function is_palindrome(i, j : integer) : boolean;
var t : integer;
Begin
t := j-i+1;
if odd (t) then is_palindrome := (L[(i+j) div 2] >= n)
else is_palindrome := (C[(i+j) div 2] >= n)
end;
-------------------------------------------------------------

Vy thut ton ca chng ta c phc tp tnh ton l O(N
2
), chi ph b nh l O(N).

13. m chui i xng ( http://vn.spoj.pl/problems/QBPAL )
Trong mt bui hc vit ch, Bm pht hin trong mt s t khi b i mt s k t th c ngc
hay c xui u ging nhau.
V d t IOICAMP, khi xa i cc ch ci C,A,M,P, th cn li IOI l mt t i xng.
Bm cm thy th v, v cu tip tc th xa cc k t khc, kt qu l c thm nhiu t i xng
na: II, I, O, C Nhng nu vi mt t di, c th tng cch xa nh vy th tht mt thi gian.
Bn hy vit chng trnh gip Bm tnh s cch xa sao cho t thu c i xng. Hai cch xa
ch khc nhau bi th t xa cc k t th coi nh trng nhau.
Input
Mt dng duy nht l t cn tnh s cch xa, t ny ch cha cc ch ci in hoa A, B, .., Z. (
di t khng qu 120 )
Output
Mt s duy nht l s cch xa.
Example
Input:
IOICAMP

Output:
9

Hng dn: Vic m s cch xa cc k t to thnh Palindrome cng chnh l m xem
xu ban u c bao nhiu xu con (khng cn lin tip) l xu Palindrome
Gi F[i, j] : s palindrome l xu con ca on i..j. Ta c cng thc:
--------------------------------------------------------------------
F[i, i] := 1;
If s[i] = s[j] then F[i, j] := F[i+1, j] + F[i, j-1] + 1
If s[i] <> s[j] then F[i, j] := F[i+1, j] + F[i, j-1] - F[i+1, j-1]
--------------------------------------------------------------------

on chng trnh trn ch c tnh m phng, mun hon thin bn phi ci t cc php tnh
cng tr s ln v kt qu c th ln ti 2
N
- 1. phc tp ca thut ton l O(N
2
).

14. Palindrome - IOI 2000
Cho mt xu, hi phi thm vo n t nht bao nhiu xu k t n tr thnh mt palindrome
( di <= 5000).
Gi F[i, j] l s php bin i t nht cn thm vo on i..j on i..j tr thnh palindrome.
Ta c cng thc :
- F[i, i] = 0;
- Nu s[i] = s[j] th F[i, j] = F[i+1, j-1]
- Nu s[i] <> s[j] th F[i, j] = Min( F[i, j-1], F[i+1, j] ) + 1;

15. Chui i xng ( http://vn.spoj.pl/problems/NKPALIN )
Mt chui c gi l i xng (palindrome) nu nh khi c chui ny t phi sang tri cng thu
c chui ban u.
Yu cu: tm mt chui con i xng di nht ca mt chui s cho trc. Chui con l chui thu
c khi xa i mt s k t t chui ban u.
D liu vo
Gm mt dng duy nht cha chui s, ch gm nhng ch ci in thng.
Kt qu
Gm mt dng duy nht l mt xu con i xng di nht ca xu s. Nu c nhiu kt qu, ch
cn in ra mt kt qu bt k.
Gii hn
Chui s c di khng vt qu 2000.
V d
D liu mu
lmevxeyzl

Kt qa
level

Hng dn: Gi F[i, j] l chui con i xng di nht ca chui xt t i..j
Nu s[i] = s[j] th F[i, j] := F[i+1, j-1] + 2 ngc li F[i, j] := Max(F[i+1, j], F[i, j-1]);
C s quy hoch ng: - F[i, i] = 1;
- Nu s[i] = s[j] th F[i, i+1] = 2 ngc li F[i, i+1] = 1;

16. Xu con chung di nht ( http://vn.spoj.pl/problems/QBSTR )
Xu k t X c gi l xu con ca xu k t Y nu ta c th xo i mt s k t trong xu Y
c xu X.
Cho bit hai xu k t A v B, hy tm xu k t C c di ln nht v l con ca c A v B.
Input
Dng 1: cha xu A
Dng 2: cha xu B
Output
Ch gm mt dng ghi di xu C tm c
Example
Input:
abc1def2ghi3
abcdefghi123

Output:
10

Hng dn: Gi F[i, j] l di xu con chung di nht ca xu gm i k t u ca xu A v j
k t u ca xu B. Ta c cng thc QH

if A[i] = B[j] then
F[i, j] := F[i-1, j-1] + 1
else
F[i, j] := Max(F[i-1, j], F[i, j-1], F[i-1, j-1]);
17. Dy con chung khng lin k di nht (http://vn.spoj.pl/problems/LNACS)
Dy C = c
1
, c
2
, ..., c
k
l dy con khng lin k ca dy A = a
1
, a
2
, ..., a
m
nu C c th nhn c
bng cch chn mt dy cc phn t khng lin k ca A, ngha l tm dc dy cc ch s i
1
, i
2
,
..., i
k
sao cho:

1 i
1
, i
2
, ..., i
k
m;
i
1
< i
2
- 1, i
2
< i
3
- 1, ..., i
k - 1
< i
k
- 1;
c
1
= a
i1
, c
2
= a
i2
, c
k
= a
ik
.

Ta gi di ca dy s l s phn t ca n.
Cho hai dy:
A = a
1
, a
2
, ..., a
m
v
B = b
1
, b
2
, ..., b
n

Dy C c gi l dy con chung khng lin k ca hai dy A v B nu nh n va l dy con
khng lin k ca A, va l dy con khng lin k ca B.

Yu cu
Cho hai dy s A v B. Hy tm di ca dy con chung khng lin k di nht ca hai dy
cho.
D liu
Dng u tin cha hai s nguyn dng m v n (2 m, n 10
3
) c ghi cch nhau bi
du cch, ln lt l s lng phn t ca dy A v dy B.
Dng th i trong m dng tip theo cha s nguyn khng m a
i
(a
i
10
4
), i = 1, 2, ..., m.
Dng th j trong n dng tip theo cha s nguyn khng m b
j
(b
j
10
4
), j = 1, 2, ..., n.
Kt qu
Ghi ra trn mt dng duy nht di ca dy con chung khng lin k di nht ca hai dy A v B
Input:
4 5
4
9
2
4
1
9
7
3
4

Output:
2


Hng dn: y l bi s 1 trong thi HSG QG Tin hc nm 2010
Bi ton ny hon ton tng t vi bi ton 16. Cc bn t code!
18. on cao tro ca bn nhc ( http://vn.spoj.pl/problems/NKTHEME )
Trong mt bn nhc thng c nhng on nhc c s dng nhiu ln (t nht 2 ln). Nhng
on gi l "on cao tro". Do c th s dng nhiu ging khc nhau (son, la, si...) nn nt
u tin ca cc ln xut hin c th khc nhau, nhng chnh lch cao gia hai nt lin tip th
nh nhau.
Chng hn 1 2 5 4 10 v 4 5 8 7 13 c coi l th hin mt on cao tro, v chng cng chnh
lch cao : +1,+3,-1,+6.
Trong mt bn nhc, on cao tro cn phi tha mn nhng iu kin:
on cao tro phi c t 5 nt nhc tr ln.
Nhng ln xut hin ca on khng c chng ln nhau (khng c nt nhc chung).
Yu cu: Cho mt bn nhc, tm on cao tro di nht.
D liu vo
Dng 1: cha s nguyn n, s nt nhc (n 5000).
Mt s dng sau cha n s nguyn trong phm vi 1..88, th hin n nt nhc.
Kt qu
In ra 1 dng duy nht cha 1 s nguyn l di on cao tro di nht. Nu khng tm c
on cao tro, in ra 0.
V d
D liu mu
30
25 27 30 34 39 45 52 60 69 79 69 60 52 45 39 34 30 26 22 18
82 78 74 70 66 67 64 60 65 80

Kt qa
5
5 nt cui dng 1 v 5 nt u dng 2 th hin on cao tro di nht.
Hng dn: Gi F[i, j] l on cao tro di nht ca bn nhc xt t 1..i v i+5..j. Vi t tng
ca bi xu con chung di nht ta c th gii quyt bi ton nu trn! Kt qu l Max(F[i, j])

19. Blast (http://vn.spoj.pl/problems/MBLAST )
- - - - - -
-).
.
.
Input
- <=2000.
, 1 K 100.
Output
.
Sample














Hng dn: Gi F[i, j] l khong cch nh nht gia 2 xu m rng ca A xt t 1..i v B xt t
1..j. Ta c



F[i, j] := Min





Sau y chng ta s xt n chui cc bi ton QH lin quan ti dy s, bng s.

20. Dy con di nht ( http://vn.spoj.pl/problems/NKMAXSEQ )
Cho dy s nguyn a
1
, a
2
, , a
n
.
Dy s a
i
, a
i+1
, , a
j
vi 1 i j n c gi l dy con ca dy s cho v khi , j-i+1 c
gi l di, cn a
i
+a
i+1
...+a
j
c gi l trng lng ca dy con ny.
Yu cu: cho s nguyn p, trong s cc dy con ca dy s cho c trng lng khng nh hn
p hy tm dy con c di ln nht.
D liu vo
Dng u tin ghi hai s nguyn n v p cch nhau bi du cch.
Dng th i trong s n dng tip theo cha s nguyn a
i
l s hng th i ca dy s cho,
i = 1, 2, , n.
Kt qu
Ghi ra s nguyn k l di ca dy con tm c (qui c: nu khng c dy con no tha mn
iu kin t ra th k = -1).
BLAST.IN BLAST.OUT
cmc
snmn
2
10
koiv
ua
1
5

mj
jao
4

12


F[i-1, j-1] + abs(ORD(s1[i]) - ORD(s2[j]))
F[i-1, j-1] + 2 * K
F[i-1, j] + K
F[i, j-1] + K
Hn ch
Trong tt c cc test: 1 n 50000; |a
i
| 20000; |p| 10
9
. C 50% s lng test vi n 2000.
V d
D liu mu
5 6
-2
3
2
-2
3
Kt qa
4
D liu mu
4 9
2
3
2
-2
Kt qa
-1

Hng dn: Gi F[i] trng lng ca dy xt t 1..i. S dng mng D vi ngha: D[i] = true
nu i l v tr "ng quan tm", y l v tr lm cho trng lng ca 1 dy lin tc gim so vi v
tr k trc n. Cch xc nh v tr "ng quan tm" c thc hin qua on chng trnh sau:
---------------------------------------
D[0] := true;
min := 0;
For i:=1 to n do
begin
If F[i] < min then
begin
min := F[i];
D[i] := true;
end;
end;
---------------------------------------
on chng trnh tm ra di ln nht.
---------------------------------------
max_length := -1;
pos := n;
For i := n downto 0 do
If D[i] then
begin
For j := pos downto i+1 do
If F[j] - F[i] >= p then
begin
If j - i > max_length then max_length := j - i;
break;
end;
pos := j;
end;
---------------------------------------
y l bi ton c bn v c nhiu ng dng. Tuy code ngn nhng cc bn cn c v hiu r
bn cht ca n!!!
21. Dy con ngn nht
Cho dy s nguyn a
1
, a
2
, , a
n
.
Dy s a
i
, a
i+1
, , a
j
vi 1 i j n c gi l dy con ca dy s cho v khi , j-i+1 c
gi l di, cn a
i
+a
i+1
...+a
j
c gi l trng lng ca dy con ny.
Yu cu: cho s nguyn p, trong s cc dy con ca dy s cho c trng lng khng nh hn
p hy tm dy con c di b nht.
D liu vo
Dng u tin ghi hai s nguyn n v p cch nhau bi du cch.
Dng th i trong s n dng tip theo cha s nguyn a
i
l s hng th i ca dy s cho,
i = 1, 2, , n.
Kt qu
Ghi ra s nguyn k l di ca dy con tm c (qui c: nu khng c dy con no tha mn
iu kin t ra th k = -1).
Hn ch
Trong tt c cc test: 1 n 50000; 0 a
i
20000; |p| 10
9
.

Hng dn: Cn ch im khc bit gia bi ton ny v bi Dy con di nht ch gi tr
ca a[i] 0, v kt qu l ngn nht. Bi ton ny c th gii quyt trong O(n) nh sau:
-----------------------------------------------------------------
i := 1; j := 1;
s := a[1];
min := maxlongint;
while (i <= j) and (j <= n) do
begin
if s < k then
begin
inc(j);
inc(s, a[j]);
end
else
begin
if min > j - i + 1 then min := j - i + 1;
dec(s, a[i]);
inc(i);
end;
end;
-----------------------------------------------------------------
Cc bn t kim tra tnh ng n ca thut ton!

22. Help the PM! ( http://vn.spoj.pl/problems/HELPPM )
GIP NGI TH TNG!
Nm 2050, lc ny L n Khu tr thnh Th tng Vit Nam. ng nhn c mt ngh
cho php khai thc K m
3
g mt khu rng xut khu. Khu rng ny c dng hnh ch nht
MxN km
2
. tin qun l th ngi ta chia khu vc thnh MxN vng (M hng, N ct) v lng g
ti mi khu vc (tnh theo m
3
) c bit. Cc hng c nh s 1 n M t trn xung di.
Cc ct c nh s t 1 n N t tri sang phi. Ta ca vng nm ti hng i, ct j l (i, j).
Ngi Th tng quyt nh cho php khai thc v vng khai thc d qun l nn l mt vng
hnh ch nht. Ngi Th tng mun tm mt phng n khai thc g sao cho din tch khai thc
l nh nht v vn lng g cn thit xut khu.

Do lu ngy khng lp trnh nn ngi Th tng cn n s gip ca cc bn. Cc bn hy
gip ngi Th tng no.
D liu
Dng th nht ghi ba s M, N, K (1 M, N 500, 1 K 10
9
).
Dng th i trong M dng tip theo ghi N s nguyn khng m, trong s th j cho bit
lng g ti khu vc (i, j). Bit lng g ti mi khu vc khng vt qu 10
4
m
3
.
Kt qu
Nu khng tn ti vng khai thc g no cho g xut khu, in ra -1. Ngc li in ra:
Dng th nht ghi din tch nh nht c th ca vng khai thc g.
Dng tip theo ghi bn s l ch s ca gc tri trn v gc phi di ca vng khai thc
g. Nu c nhiu vng cng tha mn th in ra ta ca mt vng bt k.
V d
D liu
3 3 19
5 4 0
4 7 0
0 0 2

Kt qu
4
1 1 2 2

Hng dn: Xt hai cnh L, R ca bng s.
For L := 1 to N do
For R := L to N do
By gi ta c dy m phn t, phn t i c gi tr bng A[i, L] + A[i, L+1] + ... + A[i, R]
p dng phin bn mt chiu ca bi ton gii - bi ton Dy con ngn nht.

23. Dy con c tng bng S
Cho dy cc s nguyn A
1
, A
2
, A
3
, ...A
n
. Hy tm mt dy con ca dy (cc phn t khng cn
lin tip) c tng bng S.

Hng dn: t L[i, t] = true nu c th to ra tng t t mt dy con ca dy gm cc phn t
A
1
, A
2
, ..A
i
. Ngc li th L[i, t] = false. Nu L[n,S] = true th p n ca bi ton trn l c.
Ta c th tnh L[i, t] theo cng thc: L[i, t] = true nu L[i1,t] = true hoc L[i1,ta[i]] = true.
Ci t: Nu p dng lun cng thc trn th ta cn dng bng phng n hai chiu. Ta c th
nhn xt rng tnh dng th i, ta ch cn dng i-1. Bng phng n khi ch cn 1 mng 1
chiu L[0..S] v c tnh nh sau:
L[0]:=1;
for i := 1 to n do
for t := S downto a[i] do
L[t] := L[t] xor L[ta[i]];

D thy bi ch l cch pht biu khc ca Bi 1: i xem phim. Chi ph khng gian ca cch
ci t trn l O(m), chi ph thi gian l O(n.m), vi m l tng ca n s. Hy t kim tra xem ti
sao vng for th 2 li l for downto ch khng phi l for to.

24. Dy con lin tip c tng ln nht
Cho dy cc s nguyn A
1
, A
2
, A
3
, ...A
n
. Hy tm dy con lin tip c tng ln nht v in ra tng
Gii hn: - |A
i
| 10
9



- N 100000

Hng dn: Nu gi F[i] l tng cc s t 1..i, kt qu l Max(F[i] - F[j]) th chng trnh c
phc tp O(N
2
), khng kh thi vi N = 100000. Ta c th ci tin gim phc tp xung nh
sau: Max(F[i] - F[j]) = F[i] - Min(F[0], F[1], F[2], ... F[i-1]) = F[i] - F[C[i]]
vi C[i] l ch s ca phn t nh nht ng trc F[i]. phc tp lc ny l O(N).
p dng bi ton ny c th gii quyt c bi Ma trn con c tng ln nht.

25. Dy con khng gim di nht ( http://vn.spoj.pl/problems/QBMSEQ )
Cho dy s nguyn dng a
1
, a
2
, ..., a
n
.
Dy s: a
i
, a
i+1
, ..., a
j
tha mn a
i
a
i+1
... a
j
. Vi 1 i j n c gi l dy con khng
gim ca dy s cho v khi s j-i+1 c gi l di ca dy con ny.

Yu cu: Trong s cc dy con khng gim ca dy s cho m cc phn t ca n u thuc
dy s {u
k
} xc nh bi u
1
= 1, u
k = uk-1
+ k (k 2), hy tm dy con c di ln nht.

Input

Dng u tin cha mt s nguyn dng n (n 10
4
).
Dng th i trong n dng tip theo cha mt s nguyn dng a
i
(a
i
10
8
) l s hng th i ca
dy s cho, i = 1, 2, ..., n.

Output

Gm 1 dng duy nht ghi s nguyn d l di ca dy con khng gim tm c (quy c rng
nu khng c dy con no tha mn iu kin t ra th d = 0).
Example
Input:
8
2
2007
6
6
15
16
3
21
Output:
3

Hng dn: Ta nhn thy dy { U
k
} c cng thc tng qut: U
k
= k * (k+1) / 2;
Gi F[i] l di dy con khng gim di nht xt t 1..i. Ta c:
- Nu a[i] thuc dy { U
k
} v (a[i] >= a[i-1]) v (F[i-1] > -1) th c F[i] := F[i-1] + 1;
- Nu a[i] khng thuc dy th F[i] := -1. Kt qu l Max(F[i])

26. V tr tt ( http://vn.spoj.pl/problems/NKSEQ )
Cho dy s nguyn a1, a2, ..., an (1 n 100000), mi s khng vt qa 10000. Dy s ny
c vit trn mt vng trn. Ngha l, khi ct vng trn ti v tr j, ta thu c:
aj, aj+1,..., an, a1, a2, ..., aj1
V tr j c gi l v tr tt, nu cc iu kin sau y c tha mn:
aj > 0
aj + aj+1 > 0
....
aj + aj+1 + ... + an > 0
aj + aj+1 + ... + an + a1 > 0
...
aj + aj+1 + ... + an + a1 + a2 + ... + aj2 > 0
aj + aj+1 + ... + an + a1 + a2 + ... + aj2 + aj1 > 0
Yu cu: hy m s v tr tt.
D liu vo
Dng u tin cha s nguyn n.
Dng th 2 cha dy s a1, a2,...,an.
Kt qu
In ra 1 s nguyn duy nht l s v tr tt.
V d
D liu mu
5
0 1 -2 10 3

Kt qa
2
Hng dn:

Cch 1: t
L[i] = Min(a[1], a[1] + a[2], ..., a[1] + a[2] + ... + a[i])
R[i] = Min(a[n], a[n-1] + a[n] , ..., a[i] + ... + a[n])
S[i] = a[i] + ... + a[n]
Khi i l v tr tt khi v ch khi R[i] > 0 AND S[i] + L[i-1] > 0
Mng L, R, S c th tnh trong O(n).
phc tp thut ton: O(n).
Cch trn y kh d hiu. Ngoi cch ny ta cng c mt cch khc kh n gin nh sau:

Cch 2:
Xt S = a[1] + a[2] + ... + a[n]
Nu S <= 0 th khng c v tr tt, in ra 0
Nu s > 0
t F[i] = Min(a[i], a[i]+a[i+1], ..., a[i]+...+a[i-1])
Trc tin ta tnh
F[n] = Min(a[n], a[n]+a[1], ..., a[n]+...+a[n-1]) mt O(n)
Sau ta c nhn xt:
F[n-1] = Min(a[n-1] + F[n], a[n-1])
V: a[n-1]+(a[n], a[n]+a[1], ..., a[n]+...+a[n-1]) s to thnh cc tng, tr mt trng hp l
a[n-1] + (a[n]+...+a[n-1]) = a[n-1] + s.
Tuy nhin v s > 0 nn a[n-1] + s > a[n-1], do kt qu ny s khng c tnh!
Tng t, ta c:
F[i] = Min(a[i] + F[i+1], a[i])
Do F[i] ph thuc vo F[i+1] nn ch cn dng 1 bin.

27. Dy con di nht c tng chia ht cho K ( http://vn.spoj.pl/problems/QBSEQ )
Cho mt dy gm n ( n <= 1000) s nguyn dng A
1
, A
2
, ..., A
n
v s nguyn dng k (k <=
50). Hy tm dy con ( khng cn lin tip ) gm nhiu phn t nht ca dy cho sao cho tng
cc phn t ca dy con ny chia ht cho k.

Input
Dng u tin cha hai s n, k ghi cch nhau bi t nht 1 du trng.
Cc dng tip theo cha cc s A
1
, A
2
, ..., A
n
c ghi theo ng th t cch nhau t nht mt du
trng hoc xung dng

Output
Gm 1 dng duy nht ghi s lng phn t ca dy con di nht tho mn
Example
Input:
10 3
2 3 5 7
9 6 12 7
11 15

Output:
9

28. Dy con lin tip di nht c tng chia ht cho K
Cho mt dy s gm N s nguyn v mt s nguyn dng k. Hy tm mt dy con di nht lin
tip nhau sao cho tng chia ht cho k.
D liu vo: t file DAYSO.INP c dng:
- Dng u tin l hai s N v k (N 500000; k 10000);
- Cc dng tip theo l N s nguyn ca dy (cc s kiu Longint), mi s trn mt dng.
Kt qu: ra file DAYSO.OUT gm mt dng duy nht cha hai s m v s, trong m l di ln
nht tm c v s l v tr bt u ca dy .
V d:



Hng dn:
- Gi S[i] l tng cc s t a[1] n a[i] trong dy.
- d tnh ton v tit kim b nh, ta dng lun mng a nh sau : a[i] := (a[i-1]+a[i]) mod k;
- V K 10000 nn 0 a[i] 9999. Dng mng Pos : [0..9999] vi ngha Pos[i] l v tr xut
hin u tin ca a[i] trong dy, nu a[i] cha xut hin th Pos[i] = 0.
- Trong bc duyt n phn t a[j], nu Pos[a[j]] <> 0 th ta s cp nht Max vi (j - Pos[a[j]] )
- phc tp O(n)

29. Dy con tng di nht ( http://vn.spoj.pl/problems/LIS )
Cho mt dy s nguyn gm N phn t A[1], A[2], ... A[N].
Bit rng dy con tng n iu l 1 dy A[i
1
],... A[i
k
] tha mn
i
1
< i
2
< ... < i
k
v A[i
1
] < A[i
2
] < .. < A[i
k
]. Hy cho bit dy con tng n iu di nht ca dy
ny c bao nhiu phn t?

Input
Dng 1 gm 1 s nguyn l s N (1 N 30000).
Dng th 2 ghi N s nguyn A[1], A[2], .. A[N] (1 A[i] 2
32
).
DAYSO.INP DAYSO.OUT
3
1 2 3
3 1
Output
Ghi ra di ca dy con tng n iu di nht.

Example
Input:
6
1 2 5 4 6 2

Output:
4

Gii thch test v d: Dy con di nht l dy A[1] = 1 < A[2] = 2 < A[4] = 4 < A[5] = 6, di
dy ny l 4.

Hng dn: Ci t theo cch ci tin: Kt hp tm kim nh phn + QH. phc tp ca bi
ton l O(NlogN).

30. Sp xp cc qun bi (http://vn.spoj.pl/problems/MCARDS )
.
Input
, (1 N 100).
.
.
Output
.
Sample











CARDS.IN CARDS.OUT
2 2
2 1
1 2
1 1
2 2
2

4 1
2 1
3 1
1 1
4 1
0

3 2
3 2
2 2
1 1
3 1
2 1
1 2
2

Hng dn: C tt c N*C qun bi. Nu nh tt c u cng 1 mu th cch lm d nhn ra l
tm ra L l di ca dy tng di nht. p n s l N*C - L. Vy trong trng hp bi ton
ny ta nn sp xp mu no ng trc? Th t no s cho kt qu ti u? Ta s th tt c cc
phng n chn gii php ti u! Tm qun i vic bi m ha cc mu t 1..4, thay v
ta coi D[i] l th t ca mu i (1 i 4) trong dy sau khi sp xp. V d:

th t mu 1 mu 4 mu 2 mu 3
D D[1] = 1 D[4] = 2 D[2] = 3 D[3] = 4

Sau khi c th t ca cc mu, coi nh dy lc ny c N*C qun ch c mt mu v gi tr ca
tng qun bi c tnh nh sau: a[i] = D[mau[i]] * 1000 + gt[i]
vi: - mau[i] : mu ca qun bi i.
- gt[i] : gi tr thc ca qun bi trong cho.
Vi cch cp u bi, ta hon ton c th gii quyt bi ton!
phc tp tnh ton O(NlogN * C!) vi NlogN gii quyt bi ton dy con tng di nht v C!
php hon v.

31. Sequences ( http://vn.spoj.pl/problems/SPSEQ )
W. l 1 dy cc s nguyn dng. N c cc c im sau:
- di ca dy l 1 s l: L = 2*N + 1
- N + 1 s nguyn u tin ca dy to thnh 1 dy tng
- N + 1 s nguyn cui ca dy to thnh 1 dy gim
- Khng c 2 s nguyn no cnh nhau trong dy c gi tr bng nhau
V d: 1, 2, 3, 4, 5, 4, 3, 2, 1 l 1 dy W. di 9. Tuy nhin, dy 1, 2, 3, 4, 5, 4, 3, 2, 2
khng l 1 dy W.
Yu cu: Trong cc dy con ca dy s cho trc, tm dy W. c di di nht.
Input
Dng 1: s nguyn dng N (N <= 100000), di dy s.
Dng 2: N s nguyn dng a
i
(a
i
<= 10
9
).
Output
1 s nguyn dng duy nht l di dy W. di nht.
Example
Input:
10
1 2 3 4 5 4 3 2 1 10

Output:
9
Input:
19
1 2 3 2 1 2 3 4 3 2 1 5 4 1 2 3 2 2 1

Output:
9

32. Super Number
Cho dy s nguyn a
1
, a
2
, , a
N
khc nhau i mt (N 10
5
, 1 a
i
2
31
). S a
i
c gi l s
c bit i vi dy s trn nu a
i
thuc t nht mt dy con tng di nht ca dy s ban u.
Yu cu: Tm mi s c bit ca dy ban u ca dy s nguyn a
1
, a
2
, , a
N
.
D liu: vo t file vn bn SPECIAL.INP nh sau:
Dng u l s T ( 1<= T <= 10) l s b test; T nhm sau, mi nhm gm 2 dng: Dng th
nht ghi s N, dng th hai ghi N s a
1
, a
2
, , a
N
.
Kt qu: ghi ra tp vn bn SPECIAL.OUT gm T nhm, mi nhm gm 2 dng: Dng u ghi s
cc s c bit ca b test tng ng, dng th hai ghi gi tr cc s c bit theo gi tr tng
dn.
V d:






Hng dn: Trong bi ton ny, nu tm tt c cc dy tng di nht ri kim tra a
i
(1 i N)
l khng kh thi. Mt cch gii kh hay ca bi ton nh sau:
- Gi L[i], R[i] ln lt l di dy con tng di nht kt thc, bt u ti A
i
, v Max l di
ca dy con tng di nht. A
i
l s c bit ca dy khi v ch khi L[i] + R[i] = Max + 1.

33. Chia dy ( http://vn.spoj.pl/problems/QBDIVSEQ )
Dy s M phn t B c gi l dy con ca dy s A gm N phn t nu tn ti mt m chuyn
C gm M phn t tho mn B[i]=A[C[i]] vi mi I = 1M v 1 C[1] < C[2] < ... < C[m] N.
Mt cch chia dy A thnh cc dy con "c chp nhn" nu cc dy con ny l cc dy khng
gim v mi phn t ca dy A thuc ng mt dy con.
Yu cu: Bn hy chia dy con ban u thnh t dy con nht m vn "c chp nhn".
Input
Dng u tin ghi s N l s phn t ca dy A. ( N 10
5
)
N dng tip theo ghi N s t nhin l cc phn t ca dy A. ( A
i
10
9
)
Output
Ghi mt duy nht l s lng dy con t nht tha mn.
SPECIAL.INP SPECIAL.OUT
2
7
1 2 3 7 4 5 6
5
1 4 3 2 5
6
1 2 3 4 5 6
5
1 2 3 4 5
Example
Input:
4
1
5
4
6

Output:
2

Hng dn: Ta nhn thy l s dy con t nht chnh bng di ca dy con gim cc i.

34. Nested Dolls ( http://vn.spoj.pl/problems/MDOLLS )
1
2
1 < h2.
.








Input
, 1 m 20000,
1, h1,w2, h2,
, 1 wi, hi 10000.

SAMPLE INPUT
4
3
20 30 40 50 30 40
4
20 30 10 10 30 20 40 50
3
10 30 20 20 30 10
4
10 10 20 30 40 50 39 51
Output
.

SAMPLE OUTPUT
1
2
3
2
Hng dn: Sp xp cc bp b theo chiu tng dn w[i]. Bi ton c a v bi QBDIVSEQ
p dng trn dy h[i]. Ch : X l sp xp mt cch kho lo c th AC ;)

35. Wooden Sticks ( http://vn.spoj.pl/problems/MSTICK )
:
.
mn
.
( 9 , 4 ) ( 2 , 5 )
( 4 , 1 ) ( 5 , 3 ) ( 9 , 4 )
( 1 , 2 ) ( 2 , 5 ) .
Input
, 1 <= n <= 5000 ,
1 , w1 , l2 , w2 ,..., ln , wn ,
.

SAMPLE INPUT
3
5
4 9 5 2 2 1 3 5 1 4
3
2 2 1 1 2 2
3
1 3 2 2 3 1

Output
.
SAMPLE OUTPUT
2
1
3

36. Con voi ( http://vn.spoj.pl/problems/MCONVOI )
chia cho 1000000007.
Input
(1 N 30
.
Output
.
1000000007.
Sample













37. ng i c tng ln nht ( http://vn.spoj.pl/problems/QBMAX )
Cho mt bng A kch thc m x n (1 <= m, n <= 100), trn ghi cc s nguyn a
ij
(|a
ij
| <=
100). Mt ngi xut pht ti no ca ct 1, cn sang ct n (ti no cng c).
Quy tc i: T (i, j) ch c quyn sang mt trong 3 (i, j + 1); (i - 1, j + 1); (i + 1, j + 1)
Input
Dng 1: Ghi hai s m, n l s hng v s ct ca bng.
M dng tip theo, dng th i ghi n s trn hng i ca bng theo ng th t t tri qua phi
Output
Gm 1 dng duy nht ghi tng ln nht tm c
Example
Input:
5 7
9 -2 6 2 1 3 4
0 -1 6 7 1 3 3
8 -2 8 2 5 3 2
1 -1 6 2 1 6 1
7 -2 6 2 1 3 7

Output:
41

Hng dn: y l mt bi QH c bn, cn lu mt cht v th t tnh cng thc QH.

38. Roboco
Cng ty pht trin phn mm t ng ha Roboco va cho xut xng mt m hnh Robot mi.
c im ca Robot mi ny l n c th lm vic theo chng trnh son tho cho n. Trong
nhng chng trnh nh vy c cc lnh: thc hin mt bc di chuyn v pha ng, Ty, Nam,
Input Input
11
8 6
7 4
5 4
5 1
5 6
6 2
3 2
4 3
4 5
3 5
2 4
6
1 3
2 2
3 1
5 3
4 4
3 5

Output Output
4
3
2
7
Bc. Robot thc hin cc lnh chng trnh mt cch tun t v dng li khi gp du hiu kt thc
chng trnh. Cc chuyen vin ca cng ty Roboco mun xc nh xem c bao nhiu chng trnh
khc nhau gm K cu lnh iu khin trn trc ta tng ng vi di ca mt bc di
chuyn ca Robot.

D liu vo: t file ROBOCO.INP cha 3 s nguyn K, x, y (0 K 16, |x|, |y| 16) c ghi
cch nhau bi du cch.

Kt qu: ghi ra file ROBOCO.OUT s lng chng trnh tm c.

V d:



Hng dn: Gi F[i, j, k] l s cch n [i, j] sau k bc. y l bi kh n gin, cc bn c
th c code hiu:

-------------------------------------------------------------------------------
a[0, 0] := 1;
For k := 1 to n do
Begin
For i := -26 to 26 do
For j := -26 to 26 do
c[i, j] := a[i-1, j] + a[i, j-1] + a[i, j+1] + a[i+1, j];
a := c;
End;
-------------------------------------------------------------------------------

39. ng i trn li ( http://vn.spoj.pl/problems/NKPATH )
Cho mt li vung gm m dng v n ct. Cc dng c nh s t 1 n m t trn xung
di, cc ct c nh s t 1 n n t tri qua phi. nm v tr dng i v ct j ca li c
gi l (i, j) v khi , i c gi l ta dng cn j c gi l ta ct ca ny. Trn (i,
j) ca li ghi s nguyn dng a
ij
, i = 1, 2, , m; j = 1, 2, , n. Trn li cho, t (i, j) ta c
th di chuyn n (p, q) nu cc iu kin sau y c tha mn:
j < n; i p; j q v i + j < p + q;
a
ij
v a
pq
c c s chung ln hn 1.
Ta gi mt cch di chuyn t mp tri sang mp phi ca li l cch di chuyn bt u t mt
c ta ct bng 1 qua cc ca li theo qui tc di chuyn nu v kt thc mt c ta
ct bng n.
Yu cu: Tnh s cch di chuyn t mp tri li sang mp phi li.
D liu vo
Dng u tin ghi 2 s nguyn dng m, n.
Dng th i trong s m dng tip theo ghi n s nguyn dng a
i1
, a
i2
, , a
in
l cc s trn
dng th i ca li, i = 1, 2, , m.
Hai s lin tip trn cng mt dng c ghi cch bi t nht mt du cch.
ROBOCO.INP ROBOCO.OUT
5 2 3 10
Kt qa
Ghi ra 1 s nguyn l phn d ca s lng cch di chuyn tm c cho 10
9
.
Hn ch
Trong tt c cc test: 1 < m, n 100; a
ij
30000, i=1,2,,m;j=1,2,,n. C 50% s lng test
vi m, n 50.
V d
D liu mu
2 2
2 4
6 8

Kt qa
4

D liu mu
2 2
2 5
6 7

Kt qa
0

Hng dn: Gi F[i, j] l s cch ti c [i, j]. Ta c F[i, j] := F[i, j] + F[x, y] vi (1 x i,
1 y j). Kt qu l Sum(F[i, n]) vi 1 i m.


Phn tip theo, chng ta s lm quen vi mt s bi tp
Quy Hoch ng trng thi
Cc bi ton Quy Hoch ng u da trn cc trng thi, tuy nhin c loi trng thi d pht
hin/ kh pht hin. Do khi nhc ti QH trng thi, ta ngm hiu n l loi kh hn, dng
phc tp hn!

40. Tour du lch ca Sherry ( http://vn.spoj.pl/problems/LEM3 )
Trong k ngh h nm nay sherry c b thng cho 1 tour du lch quanh N t nc ti p vi
nhiu thng cnh ni ting ( v sherry rt ngoan ). Tt nhin sherry s i bng my bay.
Gi v my bay t t nc i n t nc j l C
ij
( d nhin C
ij
c th khc C
ji
). Tuy c b
thng cho nhiu tin i du lch nhng sherry cng mun tm cho mnh 1 hnh trnh vi chi ph
r nht c th dnh tin mua qu v tng mi ngi ( Cc chuyn bay ca sherry u c
m bo an ton tuyt i ).
Bn hy gip sherry tm 1 hnh trnh i qua tt c cc nc, mi nc ng 1 ln sao cho chi ph
l b nht nh.
Input

Dng 1: N (5 < N < 16)
Dng th i trong N dng tip theo: Gm N s nguyn, s th j l C
ij
(0 < C
ij
< 10001)

Output
Gm 1 dng duy nht ghi chi ph b nht tm c

Example








Hng dn: phn duyt ta cng xt qua bi ton ny. Ta s tham kho 1 cch gii khc
bng QH trng thi. Gi F[i, j] l chi ph thp nht khi i n thnh ph i vi trng thi lc ny l
j ( j l mt s nguyn m dy bit ca n biu th cho vic n hay cha n 1 thnh ph, vi quy
c 0 l cha n 1 l n).
Ta c F[i, j] := Min(F[x, y] + C[x, i], F[i, j]);
Cng thc trn c hiu : thnh ph x trng thi y c thm, cn thnh ph i cha c
thm. T thnh ph x ta n thnh ph i v trng thi lc ny t y s c chuyn sang j bi lc
ny thm c thnh ph i. tin cho ci t th i ta s ly bit (i-1) lm trng thi ca i ( bi
dy bit bt u t 0 ). D thy cu hnh cui cng l dy bit 11...11111 . Ta c chi ph nh nht
s l Min(F[i, (1 shl n) -1]) vi 1 i n.













Input: Output:
6
0 1 2 1 3 4
5 0 3 2 3 4
4 1 0 2 1 2
4 2 5 0 4 3
2 5 3 5 0 2
5 4 3 3 1 0

8

You might also like