You are on page 1of 14

L P TRNH = ++THU T TON S 10, 1 - 9 - 2012

HANOI
Nguy n H u i n https://nhdien.wordpress.com Email:huudien@vnu.edu.vn Mobile: 0989 061 951

ALGORITHM PROGRAMMING

Gi i thi u
B n th nghi m cho cc b n yu thch l p trnh ph thng v thi Olympic tin h c. Ti c nh l p t p ch i n t v i tn nh trn (l p trang web ring), n i dung cc bi gi ng l p trnh v cc bi thi hay. M i cc b n tham gia v cho ki n. Nh ng bi t p sau y c l y t ti li u su t m trn m ng c bin t p v s a i l i v i n i dung p d ng cc phng php gi i c a tin h c. Cc b n c cc bi hay, su t m hay g i cho ti ti a vo danh sch v i tn ch thch c a b n ho c b n su t m. C g ng c 15 ngy ti ra m t b n lu tr . M i th c m c v yu c u lin h v i: Nguy n H u i n https://nhdien.wordpress.com email:huudien@vnu.edu.vn Hanoi University of Science Center for High-Performance Computing 334 Nguyen Trai, Thanh Xuan, Hanoi Office (84-4) 557 2869 Mobile 0989 061 951

Danh sch bi
Bi 10.1 Bi 10.2 Bi 10.3 Bi 10.4 Bi 10.5 Bi 10.6 Bi 10.7 Gard . . . . . . . . . . . To tam gic . . . . S l a ch n . . . . . . ng i c a con r n Tr m Radar . . . . . . Cn b ng . . . . . . . . Nh gng c i . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 5 7 9 11 12

Danh sch chng trnh


1 2 3 4 5 6 7 grad.pas . . . . . . . vertices.pas . . . . . . LuachonSeagame.pas Snail.pas . . . . . . . radar.pas . . . . . . . balance.pas . . . . . . Mirror.pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 6 8 9 11 13

Bi 10.1 (Gard) M t ton cng nhn g m N ng i


nh s hi u t 1 n N c b tr lm vi c trn m t to nh c N t ng. Do tnh ch t c a cng vi c nn cc cng nhn ph i c b tr lm vi ctheo cc t ng lin t c t t ng 1 v m i t ng khng qu K ng i (K N) (nh v y trn cc t ng cao c th khng c cng nhn lm vi c). Yu c u: Xc nh xem c bao nhiu cch khc nhau b tr cng nhn lm vi c trn cc t ng tho mn yu c u ni trn. Hai cch b tr xem nh khc nhau n u trong hai cch b tr c t nh t m t cng nhn c phn cng khc nhau. V d N = 3, K = 2 c t t c 12 cch b tr theo b ng d i y: trong b ng, t c t th hai cc ghi tn cc cng nhn lm vi c trn t ng ghi c t 1 B ng

Hnh 1: nh d ng t p vo: Trong file vn b n gard.inp g m m t dng ghi hai s NK (1 K N 50). nh d ng t p ra: a ra file vn b n gard m t dng duy nh t ch a s M - s cch b tr khc nhau tm c. V d . gard.inp 3 2 12 gard.out

L i gi i 10.1. Phn tch. T t ng thu t ton:


Th c ch t y l m t bi ton quy ho ch ng. Ta g i L[i ] l s cch b tr khi c i ng i. u tin

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012 ta s x p vo t ng th nh t, gi s ta b tr y T ng i, r rng T = 1..Min(i, k ), khi x p T ng i t ng 1 s cn (i t) ng i v s c L[i t] cch b tr (i t) ng i cn l i vo cc t ng ti p theo. M t khc ta c Cti cch ch n ra T ng i t ng 1. Nh v y L[i ] = Ciu L[i u]; trong u = 1..t(t = min(i, k )); L[i ] = S(Ciu L[i u]) trong u = 1..t
38 39 40 41 42 44 45

n1[ i ]:= ch[nho mod 10]; nho := nho div 10; end; if nho > 0 then n1:=ch[nho] + n1; end;

Function Nhan(n1,n2:num):Num; var 46 n,nn : num; Sau khi xy d ng xong m ng L, k t qu bi ton 47 i , j , l , l1 , l2 ,nho,x: byte; l L[n]. V n ch gi thi t cho K < N < 50, nn 48 begin k t qu thu c c th s r t l n, v v y ta s dng 49 n:=ch[0]; bi ton v i s l n gi i quy t. Ta lm chng trnh 50 l1:=length(n1); 51 l2:=length(n2); v i php c ng tr s l n (xu). 52 for i :=l2 downto 1 do 53 begin Chng trnh 1: grad.pas 54 {nhan n1 voi chu so thu i } 1 const 55 x:=nu[n2[i ]]; nn:=; nho:=0; 2 fi = grad.inp; 56 for j:=l1 downto 1 do 3 fo = grad.out; 57 begin 4 max = 50; 58 nho:=nho + nu[n1[j]]x; 5 ch:array [0.. 9] of char = (0,1,2,3,4,5,6,7,8,9) ; 59 nn :=ch[nho mod 10] + nn; 6 nu:array [0 .. 9]of byte = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) ; 60 nho:=nho div 10; 7 type 61 end; 8 num = String; 62 if nho > 0 then nn:=ch[nho] + nn; 9 var 63 {them 0 de hai chuoi cung do dai} 10 n,k : byte; 64 x:=l2i; 11 Cnk : array [1.. max] of num; 65 if Length(n) < Length(nn)+x then l:=length(nn)+x 12 L : array [0.. max] of num; 66 else l :=length(n); 13 f : text; 67 for j:=length( n) +1 to l do n :=ch[0] + n; 68 for j:=length(nn)+x+1 to l do nn:=ch[0] + nn; 15 procedure readf; 69 {cong them chuoi nn vao ket qua} 16 begin 70 nho:=0; 17 assign ( f , fi ) ; 71 for j:=l x downto 1 do 18 reset( f ) ; 72 begin 19 readln(f ,N,K); 73 nho :=nho + nu[n[j]] + nu[nn[j ]]; 20 close ( f ) ; 74 n[ j]:=ch[nho mod 10]; 21 end; 75 nho :=nho div 10; 76 end; 23 procedure Tang(var n1:num;n2:Num); 77 if nho > 0 then n:=ch[nho] + n; 24 var 78 end; 25 l , i ,nho,l1 , l2 :Byte; 79 Nhan:=n; 26 Begin 80 end; 27 {them 0 de hai chuoi cung do dai} 28 l1:=length(n1); 82 procedure QHD; 29 l2:=length(n2); 83 var 30 if l1 < l2 then l:=l2 else l :=l1; 84 i , j , jj : Byte; 31 for i :=l1+1 to l do n1:=ch[0]+n1; 85 so1,so2 : num; 32 for i :=l2+1 to l do n2:=ch[0]+n2; 86 begin 33 {cong chuoi n2 vao chuoi n1} 87 for i :=1 to K do Cnk[i]:=ch [0]; 34 nho:=0; 88 L[0]:=ch [1]; 35 for i :=l downto 1 do 89 for i :=1 to N do L[i]:=ch [0]; 36 begin 90 for i :=1 to N do 37 nho := nho + nu[n1[i ]] + nu[n2[i ]]; Nguy n H u i n 2/14 https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
91 92 93 94 95 96 97 98 99 100 101 102 103 105

begin if k < i then jj :=k else jj :=i ; so1:=ch[1]; for j:=1 to jj do begin {Tinh to hop chap j cua i } so2:=cnk[j ]; Tang(cnk[j ], so1) ; so1:=so2; Tang(L[i ], Nhan(Cnk[j],L[ i j]) ) ; end; end; end; procedure writef;

106 107 108 109 110 111 112 113 115 116 117 118 119

var f : text; begin assign ( f , fo) ; rewrite(f ) ; write(f ,L[n]) ; close ( f ) ; end; begin readf ; QHD; writef ; end.

Bi 10.2 (To tam gic) Cho cc i m trn l i


tam gic u v h n nh hnh d i y:

gic u th ghi 3, l nh c a hnh thoi th ghi 4, l nh c a l c gic u th ghi 6. N u khng thu c cc tr ng h p trn th ghi 0. M i s ghi trn m t dng. V d . vertices.inp 1 2 3 11 13 29 31 26 11 13 24 4 5 9 13 12 7 1 2 3 4 5 47 8 10 17 21 32 34 vertices.out 3 0 4 6 0 0 6

Hnh 2: Cc i m ny c nh s theo th t t tri qua ph i, t trn xu ng d i (m i d u * bi u th m t s ). M t nhm nh ng i m ny s t o thnh nh c a m t hnh hnh h c nh t nh. V d nh t p h p cc i m {1, 2, 3} l nh c a m t hnh tam gic, t p h p {11, 13, 26, 24} l nh c a m t hnh bnh hnh, t p h p {8, 10, 17, 21, 32, 34} l nh c a m t l c gic u. Yu c u: Vi t chng trnh c t ng t p h p i m trn l i tam gic, xt xem chng c l t p nh c a m t trong nh ng lo i hnh sau khng: tam gic u, hnh thoi, l c gic u. Hnh ph i tho mn c hai i u ki n sau: 1. Cc c nh c a hnh ph i song song v i c nh c a l i. 2. Cc c nh c a hnh ph i c di b ng nhau. nh d ng t p vo: File vertices.inp g m nhi u t p h p i m. M i t p h p c ghi trn m t dng v khng c qu 6 s trong kho ng t 1..2.000.000.000 nh d ng t p ra: File vertices.out. V i m i t p h p i m nh n c, ph i xt xem n u l nh c a hnh tam Nguy n H u i n 3/14

L i gi i 10.2. Phn tch. gi i bi ton thu n


ti n, chng ta chuyn t "to tam gic" sang h to ( x, y) nh hnh v , x l s dng trong to tam gic, y l s th t tnh t tri sang ph i c a i m trn dng . V d i m 1 tng ng v i to (1,1), i m 9 tng ng v i to (4,3). . . Cch xy d ng:

Hnh 3: Xt m t i m A trong to tam gic. Gi s to c a A trong h to m i l ( x, y). https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012 D dng ch ng minh c cng th c sau: x ( x 1)/2 + y = A Bi ton y l tm ( x, y) t A. C nhi u phng php, nhng ta ch n phng php n gi n b ng nh n xt sau: Do y x nn sqrt(2 A) ch c th l x ho c x 1. Ta th ch n hai tr ng h p c a x l sqrt(2 A) v sqrt(2 A) + 1. Phng php gi i ny c m t chi ti t trong th t c Chuyen. T to ( x, y) ta d dng xc nh c m t c nh c a a gic song song v i c nh c a to tam gic khi hai i m u mt c a c nh c cng to x ho c to y ho c hi u to ( x y). Chi u di c a m t c nh song song v i tr c x b ng hi u to y, chi u di c a c nh song song v i hai c nh bn c a tam gic b ng hi u to x. D a vo nh ng nh n xt trn, ta c chi ti t vn b n chng trnh sau: Chng trnh 2: vertices.pas
1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 20 21 22 23 24 26 27 28 29 31 32 33 34 35 36 38 39 40 41 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

function KhoangCach(a,b:td): integer; begin with a do if x<>b.x then KhoangCach:=abs(xb.x) else KhoangCach:=abs(yb.y); end;

function SongSong(a,b: td):Boolean; begin SongSong:= (a.x=b.x) or (a.y=b.y) or ((a.xa.y)=(b.x end; function Trung: boolean; var i , j : integer; begin Trung:=true; for i :=1 to n1 do for j:=i+1 to n do if (h[ i ]. x=h[j ]. x) and (h[i ]. y=h[j ]. y) then break; Trung:=false; end; procedure Chuyen(sou: longint; var des: td) ; begin with des do begin x:=trunc(sqrt (sou2)); y:=sou(x(x1) div 2); if y>x then begin inc (x) ; y:=sou(x(x1) div 2); end; end; end; procedure Chuan; var i , min: integer; begin for i :=1 to n do Chuyen(r[i ], h[ i ]) ; min:=1; for i :=2 to n do if r [ i ] vt:=0; dai:=0; for i :=1 to n do with h[min] do if (n=4) or (n=3) then begin if ( i <>min) and ((h[i].x>x) and ((h[i ]. y=y) or (h[ i ]. xh[i ]. y=xy))) then begin vt:=i ;

program ToaDoTamGiac; const fin =vertices.inp; fou=vertices.out; type td = record x,y: longint ; end; var h: array [0..7] of td; r : array [0..7] of longint ; n, vt , dai : integer; fi , fo : text; procedure moFile; begin assign ( fi , fin ) ; reset( fi ) ; assign (fo ,fou) ; rewrite(fo) ; end; procedure dongFile; begin close ( fi ) ; close (fo) ; end; procedure InKetQua; begin writeln(fo ,n); end; 4/14

Nguy n H u i n

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
83 84 85 86 87 88 89 90 91 92 93 94 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 112 113 114

dai:=h[i ]. xx; break; end end else if ( i <>min) and ((h[i].x>x) and (h[i ]. y=y)) then begin vt:=i ; dai:=h[i ]. xx; break; end end;

115 116 117 118 119 120 122 123 124 125 126 127

begin n:=0; exit ; end; end; end; procedure XuLy; begin while not EOF(fi) do begin n:=0; while not EOLn(fi) do begin inc (n); read( fi , r [n]) ; end; readln( fi ) ; case n of 3,4,6: XetTiep; else n:=0; end; InKetQua; end; end;

128 procedure XetTiep; 129 var i , j , dem: integer; 130 begin 131 Chuan; 132 if Trung then 133 begin 134 n:=0; 135 exit ; 136 end; 137 for i :=1 to n do 138 begin 139 dem:=0; for j:=1 to n do 141 BEGIN if i <>j then 142 if SongSong(h[i],h[ j ]) and (KhoangCach(h[i],h[j ]) =dai) moFile; 143 XuLy; 144 dongFile ; then 145 END. inc (dem); if dem<2 then

Bi 10.3 (S l a ch n) Trong m t k thi d bo k t


qu thi u tr n chung k t tranh gi i bng v ch Seagames c N ( N < 101) ng i c k t qu d on ng. l a ch n ng i c gi i th ng, ban t ch c quy t nh x p hng N ng i vo m t vng trn nh s t 1 n N theo chi u ng c chi u kim ng h (t c l ng i nh s N ng bn tri ng i ng s 1), sau l a ch n m t cch ng u nhin 4 s nguyn dng m, k, p, q, trong m, k < N, cn p, q l s nguyn dng tu . Ti p theo ng i c nh n gi i th ng s c xc nh nh th t c lo i b d n sau y: Ban t ch c c ra 2 nhn vin, nhn vin th nh t b t u m t ng i ng v tr m theo chi u ng c v i kim d ng h t 1 n p, cn nhn vin th 2 b t u m t ng i ng v tr th k theo chi u kim ng h t 1 n q. Hai ng i ng v tr k t thc m c a hai nhn

vin s d i kh i hng. n y k t thc m t l t m. Lu r ng, nhn vin th 2 m ng th i v i nhn vin th 1, do anh ta c th m c ng i v tr k t thc m c a nhn vin th nh t, ngoi ra, n u v tr k t thc m c a hai nhn vin l trng nhau th ch c m t ng i ph i r i kh i hng. Sau khi nh ng ng i khng may m n r i kh i hng, m i nhn vin l i ti p t c l t m m i b t u t ng i ng c nh ng i v a b lo i theo vng m c a h . Ng i ph i r i kh i hng cu i cng theo th t c l a ch n trn l ng i c nh n gi i. N u l t m cu i cng, c hai ng i ph i ng th i r i kh i hng th c hai ng i ny u c nh n gi i. nh d ng t p vo: D li u vo trong file vn b n c tn chon.inp trong ghi 5 s N, m, k, p, q cch nhau b i t nh t m t d u cch. nh d ng t p ra: K t qu ghi ra file vn b n chon.out

Nguy n H u i n

5/14

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012 c c u trc nh sau: - Dng u tin ghi s L l s l n th c hi n vi c m. - M i dng th i trong s L dng ti p theo ghi ch s c a nh ng ng i r i kh i hng l t m th i (i = 1, 2, . . . , L). V d . chon.inp 10 1 10 4 3 chon.out 6 4 8 9 5 3 1 2 6 10 7
19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71

Var j : Longint; Begin j:=0; i :=i 1; Repeat inc ( i ) ; if i =N+1 then i:=1; if A[i ] then inc( j ) ; Until j=p; P1:=i; End; Function P2(i : Byte) : Byte; Var j : Longint; Begin j:=0; i :=i+1; Repeat dec( i ) ; if i =0 then i:=N; if A[i ] then inc( j ) ; Until j=q; P2:=i; End; Procedure Select; Var people : Byte; i , j : Byte; Begin people:=N; c:=0; Repeat inc (c) ; i :=P1(m); j:=P2(k); if i <>j then Begin Writeln(F,i , , j ) ; A[i]:=False; A[j]:=False; people:=people2; End Else Begin Writeln(F,i) ; A[i]:=False; dec(people) ; End; if i if j>1 then k:=j1 else k:=N; Until people=0; End; Procedure Run; Begin Enter; Fillchar (A,Sizeof (A),True); Assign(F,Temp.out) ;

L i gi i 10.3. Phn tch.


Ta th c hi n l p vi c lo i nh ng ng i "khng may m n" ra kh i vng, m i b c l p c th lo i 1 ho c 2 ng i n khi cn l i 1 ho c 2 ng i "may m n". T i m i b c ta ph i lm cc cng vi c: - Tm ra v tr c a ng i b lo i nh vi c m. r ng n u vng chi cn N ng i th m t i v tr m ngha l ng i th m mod N b lo i t i vng hi n t i. - Lo i 1 ho c 2 ng i ra kh i vng, tuy nhin chng ta c n lu l i ch s c a h lc u tin ghi ra file k t qu . - Gi m s ng i i. - L p l i cng vi c n khi k t thc. Chng trnh 3: LuachonSeagame.pas
1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18

Program Lua_Chon_Seagame; Const Max = 100; Fi = chon.inp; Fo = chon.out; Var A : Array [1.. Max] of Boolean; N,m,k : Byte; p,q,c : Longint; F,G : Text; Procedure Enter; Begin Assign(F,Fi) ; Reset(F); Read(F,N,m,k,p,q); Close(F); End; Function P1(i : Byte) : Byte; 6/14

Nguy n H u i n

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
72 73 74 75 76 77 78 79 80 81 82

Rewrite(F); Select ; Close(F); Assign(F,Temp.out) ; Reset(F); Assign(G,Fo); Rewrite(G); Writeln(G,c); For p:=1 to c do Begin While not seekeoln(F) do Begin Read(F,m);

83 84 85 86 87 88 89 90 91 92

Write(G,m,); End; Writeln(G); Readln(F); End; Close(F); Close(G); End; BEGIN Run; END.

Bi 10.4 ( ng i c a con r n) M t con r n s ng


trn m t l i vung 8x8 c ch a m t vi v t c n (l cc mu en trong hnh v d i y). Con r n di chuy n theo ng th ng (khi cn c th di chuy n c). Khi n g p v t c n hay g p bin c a l i vung, n s quay sang bn ph i hay bn tri c a n. N u n i di n v i i qua, n d ng h n.

- Dng u ghi s nguyn dng N (1 N 32) ch s cc en. - Trn N dng ti p theo, m i dng ghi to m t en trn d i d ng Xn, trong X (l cc ch ci la tinh vi t hoa t A n Z) ch c t v n(1 n 8) ch dng. Ch r ng khng c en t i cc A1 v A2. nh d ng t p ra: Ghi trn file snal.out g m 2 dng: - Dng u ghi s b c tho yu c u a). - Dng th nh ghi s b c tho yu c u b). V d . snal.inp 3 A6 E2 F5 13 32 snal.out

Hnh 4: Con R n lun b t u t i A1, v lun b t u vi c di chuy n b ng cch i h ng xu ng d i. V tr c a cc v t c n (t c l cc en) c cho bi t tr c. Yu c u: Tm s m con r n i qua cho n khi khnng i c n a v tho mn: a) Con r n lun i v pha bn tri c a n. b) Con r n i sao cho s i qua l l n nh t V d : Hnh v trn cho ta hnh nh c a m t l i v i ba en (t i cc v tr A6,E2 v F5). ng i tho cu a) l: i t A1 n A5, quay sang tri n E5. T E5 quay tri n E3, quay tri, i th ng v d ng B3. Con r n i qua 13 . ng i tho cu b) c cho ng i ni trn i qua 32 . l i vung bn ph i.

L i gi i 10.4. Phn tch. Gi i thu t: y l bi


ton quy n gi n v i kch th c nh . gi i quy t cu A ta ch c n m t vng l p cho con r n i theo quy t c cho n lc d ng. gi i quy t cu B ta dng phng php duy t ton b , khi g p t ng hay ch ng ng i ta cho con r n th r c 2 h ng tri v ph i, cu i cng ta thu c ng i di nh t. Ta c th k t h p c 2 cu A, B gi i quy t cng m t lc. r ng n u khi duy t ton b ta lun cho con r n r tri th l n duy t u tin k t thc s cho ta l i gi i c a cu A. Cch gi i quy t ny c nh c i m l ph i lun ki m tra t i m i l n duy t c ph i l l n duy t u tin khng i u gy ra s lng ph v t c . Tuy nhin s b c duy t khng l n nn c th dng cch ny thay cho vi c lm 2 cu r i nhau v y cng l m t t ng hay, b n Cao Minh Anh p d ng t ng ny v i m t l i gi i t t. D i y l https://nhdien.wordpress.com

nh d ng t p vo: Ghi trn file snal.inp g m N + 1 dng: Nguy n H u i n 7/14

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012 l i gi i c a b n: Chng trnh 4: Snail.pas
1 2 3 4 5 6 7 9 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 59 60 61 62

end; end; procedure Getmax; begin if max=0 then begin left :=dem; max :=dem; end else if dem>max then max:=dem; end;

uses crt ; const fi =Snail.inp; go=Snail.out; hx:array [1..4] of integer=(1,0,1,0); hy:array [1..4] of integer=(0,1,0,1); maxn=8; type arr=array[0..maxn+1,0..maxn+1] of integer; var a : arr ; max, left ,m,dem :integer; s : string ; f ,g :text; procedure Openf; begin assign ( f , fi ) ; reset( f ) ; assign (g,go); rewrite(g); end; procedure Closef; begin close ( f ) ; close (g); end; procedure Input; var i :integer; begin readln(f ,m); for i :=1 to m do begin readln(f ,S); a[ord(S [2]) ord(0),ord(S [1]) 64]:=1; end; end; procedure Khoitao; var i :integer; begin for i :=0 to 9 do begin a [0, i ]:=1; a [9, i ]:=1; end; for i :=1 to 8 do begin a[ i ,0]:=1; a[ i ,9]:=1; 8/14

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 95 96 97 99 100 101 102 103

procedure Run(x,y,k:integer); var k1,k2:integer; begin a[x,y]:=2; dem:=dem+1; if a[x+hx[k],y+hy[k]]=0 then Run(x+hx[k],y+hy[k],k) else begin if a[x+hx[k],y+hy[k]]=2 then getmax else if a[x+hx[k],y+hy[k]]=1 then begin k1:=k+1;k2:=k1; if k1=5 then k1:=1; if k2=0 then k2:=4; if a[x+hx[k1],y+hy[k1]]=0 then Run(x+hx[k1],y+hy[k1],k1) else Getmax; if a[x+hx[k2],y+hy[k2]]=0 then Run(x+hx[k2],y+hy[k2],k2); end; end; dem:=dem1; a[x,y]:=0; end; procedure Print; var i , j :integer; begin writeln(g, left 1); writeln(g,max1); end; begin openf; input ; Khoitao; Run(1,1,1);

Nguy n H u i n

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
104 105

Print ; closef ;

106

end.

Bi 10.5 (Tr m Radar) Coi nh b bi n l m t ng


th ng chia m t ph ng lm hai ph n: t li n v bi n. M i hn o nh l m t i m n m bn pha bi n. M i tr m Radar n m trn b bi n c kho ng ph sng l d, do m i hn o trn bi n c th b theo di b i m t tr m Radar n u kho ng cch gi a chng khng qu d. Chng ta s d ng h to cc v i b bi n l tr c x. Ph n bi n n m pha trn tr c x, cn ph n t li n pha d i. Cho v tr cc o v kho ng bao ph c a Radar, xc nh s Radar t i thi u c n thi t theo di c t t c cc o. V tr c a m i hn o cho b i to ( x, y).

L i gi i 10.5. Phn tch.


V i to ( x, y) c a m i o v bn knh bao ph R c a Radar, ta c th tm co n [ a, b] l hong u cu i trn b bi n, radar t b t k i m no trn o n u c th "theo di" c o. Trong tr ng h p y > r - t c l o khng th theo di. y l tr ng h p duy nh t ph i xu t -1 file k t qu (v nghi m!). V y m i o lc ny c bi u di n b i m t o n [ a, b] ti n x l. Bi ton tr thnh: "Cho n o n th ng c to u v cu i, song song v i nhau, h i c n t nh t bao nhiu ng th ng vung gc v i n o n th ng trn v c t h t n o n th ng trn." Gi i bi ton b ng cch: - S p x p cc o n tng theo honh u. N u cng honh , u tin nh ng d o c tung nh hn. - tm s Radar t nh t, ta dng thu t ton "tham lam" - thu t ton r t hi u qu v chnh xc trong tr ng h p ny ( c gi c th d dng t ch ng minh!): M t radar s bao ph nh ng o n lin ti p nhau trong dy s p x p. Trong khi gi i bi ton, cc b n c n r ng yu c u bi ton ch l s l ng Radar c n thi t theo di c t t c n o, v th to chnh xc t t ng Radar l khng c n thi t. H u h t bi gi i c a cc b n u c g ng tm s l ng Radar d a trn vi c xc nh chnh xc v tr c a chng - i u ny l hon ton khng c n thi t! Chng trnh 5: radar.pas
1 2 3 4

Hnh 5:

nh d ng t p vo: radar.inp. File input l m t b g m nhi u test. Dng u m i test g m 2 s nguyn n(n <= 1000) v d, trong n l s o trn bi n, d l kho ng bao ph c a Radar. M i dng trong n dng ti p theo l hai s nguyn ch to c a t ng o. Cc test cch nhau m t dng tr ng. D li u vo k t thc b i m t dng g m hai s 0 nh d ng t p ra: radar.out . M i dng l m t s nguyn th hi n s Radar t i thi u tm c cho m i test. Ghi -1 n u khng c ci t c V d . radar.inp 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 Nguy n H u i n 2 1 radar.out

5 6 7 8 9 10 11 12

const fi =radar.inp; go=radar.out; maxn=1000; Type Square=record x,y: real ; end; var L :array [1.. maxn] of square; b :array [1.. maxn] of boolean; T :square ; n,dem,d : longint ; find , thoat :boolean; f ,g :text; https://nhdien.wordpress.com

9/14

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
67 14 15 16 17 18 19 20 22 23 24 25 26 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 58 59 60 61 62 63 64 65 66

procedure openf; begin assign ( f , fi ) ; reset( f ) ; assign (g,go); rewrite(g); end; procedure Closef; begin close ( f ) ; close (g); end; procedure Swap(var A,B:square); var T:square; begin T:=A; A:=B; B:=T; end; procedure Solve; var i , j : longint ; begin for i :=1 to n1 do for j:=i+1 to n do begin if L[ i ]. x>L[j ]. x then swap(L[i ], L[ j ]) ; if (L[ i ]. x=L[j ]. x) and (L[i ]. y>L[j ]. y) then swap(L[i ], L[ j ]) ; end; end; procedure Giao(var Q,P:square); var i : longint ; begin if Q.y else begin Q.x:=P.x; if Q.y>P.y then Q.y:=P.y; end; end; procedure Xuli; var i , j : longint ; begin dem:=0; fillchar (b, sizeof (b),1) ; for i :=1 to n do if b[ i ] then begin inc (dem); T := L[i ]; 10/14

68 69 70 71 72 73 74 75 76 77 79 80 81 82 84 85 86 87 88 89 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 114 115 116 117 118

j := i ; find := true; while find do begin j := j+1; if j>n then exit; giao(T,L[j ]) ; if find then b[j ] := false ; end; end; end; procedure Print; begin writeln(g,dem); end; procedure Process; begin Solve ; Xuli ; Print ; end; procedure Main; var i ,x,y : longint ; k : real ; begin while not eof( f ) do begin readln(f ,n,d); if n=0 then exit; fillchar (L, sizeof (L),0) ; thoat:=false ; for i :=1 to n do begin readln(f ,x,y) ; K:=sqr(d)sqr(y); if k<0 then thoat:=true else k:=sqrt(k); L[ i ]. x:=xk; L[ i ]. y:=x+k; end; if thoat then writeln(g,1) else Process; readln(f) ; end; end; begin Openf; Main; Closef ; end.

Nguy n H u i n

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012

Bi 10.6 (Cn b ng) Coi m t cy T v i N (1 N 20000)


nt oc nh s t 1..N. Hai nt ho c l n i v i nhau b i m t c nh duy nh t ho c khng n i v i nhau. Xa b t c nt no trong cy s sinh ra m t r ng: r ng l m t t p h p m t ho c nhi u cy. nh ngha cn b ng c a m t nt l kch c c a cy l n nh t trong r ng T c t o b i b ng cch xo nt T. V d : cho m t cy:

- Gn nhn cho t ng nt, gi tr c a nhn s c tnh nh sau: - Cc l (cc nt nhn l 1. bin, khng c nt con no) c

- Cc nt cn l i c nhn l t ng gi tr cc nhn con tr c ti p c a n c ng thm 1 (tnh cho nt ). Nh v y, nhn c xy d ng ng c t cc nt l i ln. - Tnh cn b ng cho t ng nt: Theo bi "Xa b t c nt no trong cy s sinh ra m t r ng: r ng l m t t p h p m t ho c nhi u cy". Theo cch tnh nhn nh trn, s l ng cy trong r ng khi xo b t k m t nt no b ng s nt con c a n c ng thm 1. V d nt 2 trong hnh v n u b xo i s sinh ra 4 cy, s nt trong m i cy b ng chnh nhn c a nt con tr c ti p c a 2, tr cy th t c s nt b ng t ng s nt ban u tr i nt 2 v t ng s nt c a cc cy con cn l i.

Hnh 6: Xo nt 4 t o ra hai cy v i cc nt c a chng l {5} v {1, 2, 3, 6, 7}. Cy l n hn trong hai cy c nm nt, do cn b ng c a nt 4 l nm. . . D li u vo l m t cy, tnh xem nt no c cn b ng nh nh t. N u nhi u nt c cng cn b ng, hy in ra nt c th t b nh t. nh d ng t p vo: T p balance.inp Dng u: N M i dng trong N 1 dng ti p theo c hai s ch hai i m c a c a m t c nh trong cy . Khng c c nh no xu t hi n hai l n trong file, t t c cc c nh c trong cy u c thng bo. nh d ng t p ra: T p balance.out Dng u l s th t c a nt c cn b ng nh nh t Dng ti p l cn b ng c a nt V d . balance.inp 7 2 1 1 4 3 3 6 2 4 5 7 1 1 2 balance.out

Hnh 7: Chng trnh 6: balance.pas


1 2 3 4 6 7 8 9

L i gi i 10.6. Phn tch. y l m t bi ton kh


hay trong b thi m u c h i ng IOI 2003 (M ) gi i thi u. N i dung bi ton v b testcase ki m tra cc b n c th d dng download a ch http://www.ioi2003.com t ki m tra. Sau y, xin c trnh by thu t ton: Nguy n H u i n 11/14

Program Balacing; const fin =balance.inp; fou=balance.out; nmax=20000; type m1= array[0..nmax+1] of integer; var n: integer; a: m1; https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
10 11 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48

d,c, tr , t : ^m1; f : text; procedure nhap; var i : integer; begin new(d); new(c); new(tr); new(t); assign ( f , fin ) ; reset( f ) ; readln(f ,n); for i :=1 to n1 do readln(f,d^[i ], c^[ i ]) ; close ( f ) ; end; procedure inkq; var i ,min:integer; begin dispose(d); dispose(c) ; dispose( tr ) ; dispose(t) ; min:=1; for i :=2 to n do if a[ i ] assign ( f , fou) ; rewrite(f ) ; writeln( f ,min); writeln( f ,a[min]); close ( f ) ; end; procedure xuli; var i , j ,dem,bac: word; x,y: word; begin fillchar (a, sizeof (a) ,0) ; for i :=1 to n do t^[ i ]:=1; dem:=0;

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 82 83 84 85 86

while dem begin for i :=1 to n1 do begin x:=d^[i ]; y:=c^[i ]; if (a[x]<>1) and (a[y]<>1) then begin inc (a[x ]) ; tr^[x]:=y; inc (a[y ]) ; tr^[y]:=x; end; end; for i :=1 to n do if a[ i ]=1 then begin a[ i ]:=1; inc (t^[tr^[ i ]], t^[ i ]) ; inc (dem); end else if a[ i ]<>1 then a[i]:=0; end; for i :=1 to n do begin if a[ i ]=0 then tr^[i ]:=0; a[ i ]:=nt^[i]; end; for i :=1 to n do if t^[ i ]>a[tr^[ i ]] then a[ tr^[ i ]]:= t^[ i ]; end; begin nhap; xuli ; inkq ; end.

Bi 10.7 (Nh gng c i) Ban qu n l nh gng


c i mu n thay i l i ton b cc t m gng ph t ng c a nh gng ph c v t t hn khch tham quan. Nh gng hi n t i c m t b i b ng k t kch th c N N (3 N 33). M t s c a b ng ch a d u ch m . k hi u tr ng, m t s khc ch a d u thng # k hi u vung c bao b c b i cc b c t ng. T t c cc vung u c kch th c 3 3 mt. Ng i ta t gng xung quanh nh gng, ngo i tr gc trn tri v gc d i ph i tng ng v i l i vo

v ra c a nh gng. Gi thi t r ng gc trn tri v d i ph i c a b ng lun ch a d u ch m. H th ng gng cng c t bao quanh cc c t ng, t c l cc c d u thng. B n c n gip ban qu n l tnh di n tch gng c n mua hay di n tch c a cc b c t ng pha trong c a nh gng l ph n nhn th y c b i du khch vo chi. Bi t r ng chi u cao m i b c t ng u l 3 mt. nh d ng t p vo: D li u: t t p mirror.inp - Dng u tin ch a s N.

Nguy n H u i n

12/14

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012 - N dng ti p l cc d u ch m hay d u thng m t nh gng. nh d ng t p ra: K t qu : ghi ra t p mirror.out di n tch gng c n mua. V d v hnh v minh ho : V i v d ny th ng nt m trong hnh minh ho chnh l cc v tr c n t gng. Cc c bi en bi u th cc ch a d u thng.
1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 53

const fi =Mirror.inp; fo=Mirror.out; MaxN = 101; tu:array [1..4] of integer = (1,0,1,0); tv :array [1..4] of integer = (0,1,0,1); var a:array [0.. MaxN,0..MaxN] of byte; n,count: longint ; f :text; procedure init ; var i , j :integer; kt :char; begin count:=0; assign ( f , fi ) ; reset( f ) ; readln(f ,n); fillchar (a, sizeof (a) ,0) ; for i :=1 to n do begin for j:=1 to n do begin read(f , kt) ; if kt = . then a[i , j ]:=1; end; readln(f) ; end; close ( f ) ; end; procedure spread(u,v:byte); var i :integer; begin a[u,v]:=2; for i :=1 to 4 do begin if a[tu[ i ], v+tv[i ]] = 0 then inc(count) else if a[tu[ i ], v+tv[i ]] = 1 then spread(tu[ i ], v+tv[i ]) ; end; end; procedure ShowResult; var i , j :integer; begin assign ( f , fo) ; rewrite(f ) ; count:=count 4; write(f ,count9); close ( f ) ; end; begin

Hnh 8: V d . mirror.inp 5 ..... ...## ..#.. ..### ..... 198 mirror.out

L i gi i 10.7. Phn tch. T t ng thu t ton:


Th c ch t y l m t bi ton loang n thu n. V chng ta ch c m t c a vo duy nh t l (1, 1), nn ta s loang b t u t (1, 1). Gi s ta ang (i, j), chng ta s nhn ra 4 k c nh (trn d i, tri ph i). N u k c nh l "#" ho c bin th chng ta s ph i l p gng (tng bi n m). N u k c nh l "." chng ta s chuy n v tr sang v ti p t c qu trnh loang. V chng ta ph i l p knh cho c cc b c t ng l n nn ph i ro xung quanh m ng a l cc b c tu ng (k t #). Nh v y gc trn tri nh t v gc d i ph i nh t cng s c l p gng. Nhng do yu c u bi 2 ny l c a ra v c a vo nn trong bi n m count ( m s b c t ng c l p gng) chng ta ph i tr i b n. V do m i b c t ng c n 3 3 = 9m2 gng nn k t qu ra l: (count 4) 9. ti n cho vi c xy hng ro chng ta quy nh 0: l bao b c b i b c t ng, 1: l tr ng. T thu t ton trn ta c th ci t chng trnh nh sau: Chng trnh 7: Mirror.pas

Nguy n H u i n

13/14

https://nhdien.wordpress.com

L P TRNH = ++THU T TON


S 10, 1 - 9 - 2012
54 55 56

init ; spread (1,1) ; showResult;

57

end.

Nguy n H u i n

14/14

https://nhdien.wordpress.com

You might also like