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 X1X2Xn 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 Xi, nu ta c Ti k t "C" trong on chn t X1 n Xi, 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 Xi nh th ny th s k t "C" trong dy kt qu
(khi chn n Xn) cho d c lm tt n u cng Ti + (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 Cij = Cji = Chi ph i on ng trc tip
t thnh ph i n thnh ph j. Gi thit rng Cii = 0 vi i, Cij = + 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
34
1 2 1
3
4
2
Hng dn:
Hnh trnh cn tm c dng (x1 = 1, x2, , xn, xn+1 = 1) y gia xi v xi+1: hai thnh ph lin
tip trong hnh trnh phi c ng i trc tip (Cij + ) v ngoi tr thnh ph 1, khng thnh
ph no c lp li hai ln. C ngha l dy (x1, x2, , xn) lp thnh 1 hon v ca (1, 2, , n).
Duyt quay lui: x2 c th chn mt trong cc thnh ph m x1 c ng i ti (trc tip), vi mi
cch th chn x2 nh vy th x3 c th chn mt trong cc thnh ph m x2 c ng i ti (ngoi
x1). Tng qut: xi c th chn 1 trong cc thnh ph cha i qua m t xi-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 xi 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 xn ta kim tra xem xn c
ng i trc tip v 1 khng ? Nu c nh gi chi ph i t thnh ph 1 n thnh ph xn cng
vi chi ph t xn 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 Cij ( d nhin Cij c th khc Cji ). 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 Cij (0 < Cij < 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 Aij.
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 Aij 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 X1X2Xk. Trong mi bc duyt, ta s th chn Xi trong
tp Aji (1
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
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 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 A1, A2, A3, ... An. 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 107)
- N dng tip, dng th i l Ai vi |Ai| 109.
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 .. 2n - 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 (xi, yi) v (xj, yj) c nh ngha l mt vc t (xi + xj, yi + yj). 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 xi, yi ln lt l hai ch s ca vc t th i.
(|xi|, |yi| 100).
Dng cui cng ghi s hai s nguyn U V (|U|, |V| 109).
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 Pi 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 A1, A2, A3, ..., An l s cc mn yu thch ca N ngi. Tng
t vi ln th 2 l B1, B2, B3, ..., Bn. (Vi Ai, Bi
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 216 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
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 r1.. rN. 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 ri ( 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 ri 100000
Hng dn:
Gi O l tm ca ng trn bn knh R, O1, O2, O3, ... On l tm ca cc ng trn bn knh
tng ng R1, R2, R3, ... Rn.
Khi R tha mn yu cu, ta c: O1OO2 + O2OO3 + O3OO4 + ... + On-1OOn = 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 Rmin = 0 v Rmax = tng cc Ri. 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
R1 R2
R3
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
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 ti 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 ri.
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 t1, t2, ..., tN. (1 ti 30000)
Dng th ba ghi N-1 s nguyn dng r1, r2, ..., rN-1. (1 ri 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 106.
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 Gi v C1
Khong cch 0 < X Gi v C2
Khong cch 0 < X 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
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
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]
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
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 max div 2 then
begin
try( i, i );
try( i, i+1 );
end;
if j
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(N2), phn kim tra on j+1..i l palindrome hay khng mt O(N),
vy phc tp thut ton l O(N3). 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 N2. Tng cng l O(N2) 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(N2). 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(N2), 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 2N - 1. phc tp ca thut ton l O(N2).
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
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 = c1, c2, ..., ck l dy con khng lin k ca dy A = a1, a2, ..., am 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 i1, i2,
..., ik sao cho:
1 i1, i2, ..., ik m;
i1 < i2 - 1, i2 < i3 - 1, ..., ik - 1 < ik - 1;
c1 = ai1, c2 = ai2, ck = aik.
Ta gi di ca dy s l s phn t ca n.
Cho hai dy:
A = a1, a2, ..., am v
B = b1, b2, ..., bn
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 103) 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 ai (ai 104), i = 1, 2, ..., m.
Dng th j trong n dng tip theo cha s nguyn khng m bj (bj 104), 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
-
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 a1, a2, , an.
Dy s ai, ai+1, , aj vi 1 i j n c gi l dy con ca dy s cho v khi , j-i+1 c
gi l di, cn ai+ai+1...+aj 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 ai 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; |ai| 20000; |p| 109. 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 a1, a2, , an.
Dy s ai, ai+1, , aj vi 1 i j n c gi l dy con ca dy s cho v khi , j-i+1 c
gi l di, cn ai+ai+1...+aj 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 ai 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 ai 20000; |p| 109.
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
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 109).
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 104 m3.
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 A1, A2, A3, ...An. 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
A1, A2, ..Ai. 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 A1, A2, A3, ...An. Hy tm dy con lin tip c tng ln nht v in ra tng
Gii hn: - |Ai| 109
- 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(N2), 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 a1, a2, ..., an.
Dy s: ai, ai+1, ..., aj tha mn ai ai+1 ... aj. 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 {uk} xc nh bi u1 = 1, uk = uk-1 + k (k 2), hy tm dy con c di ln nht.
Input
Dng u tin cha mt s nguyn dng n (n 104).
Dng th i trong n dng tip theo cha mt s nguyn dng ai (ai 108) 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 { Uk } c cng thc tng qut: Uk = 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 { Uk } 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
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
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[i1],... A[ik] tha mn
i1 < i2 < ... < ik v A[i1] < A[i2] < .. < A[ik]. 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] 232).
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
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 a1, a2, , aN khc nhau i mt (N 105, 1 ai 2
31). S ai c gi l s
c bit i vi dy s trn nu ai 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 a1, a2, , aN.
D liu: vo t file vn bn SPECIAL.INP nh sau:
Dng u l s T ( 1
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
Sample
37. ng i c tng ln nht ( http://vn.spoj.pl/problems/QBMAX )
Cho mt bng A kch thc m x n (1
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 aij, 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;
aij v apq 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 ai1, ai2, , ain 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 109.
Hn ch
Trong tt c cc test: 1 < m, n 100; aij 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 Cij ( d nhin Cij c th khc Cji ). 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 Cij (0 < Cij < 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
Top Related