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;
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.
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 -------------------------------------------------------------------------------
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])
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
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.
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.