laptrinh-04-2012

Embed Size (px)

Citation preview

  • 8/3/2019 laptrinh-04-2012

    1/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    Nguyn Hu inhttp://nhdien.wordpress.com

    Email:[email protected]: 0989 061 951

    PROGRAMMING

    ALGORITHM

    HANOI

    Gii thiuBn th nghim cho cc bn yu thch lp trnhph thng v thi Olympic tin hc. Ti c nhlp tp ch in t vi tn nh trn (lp trangweb ring), ni dung cc bi ging lp trnh v ccbi thi hay. Mi cc bn tham gia v cho kin.Nhng bi tp sau y c ly t ti liu su

    tm trn mng c bin tp v sa i li vini dung p dng cc phng php gii ca tinhc. Cc bn c cc bi hay, su tm hay gi choti ti a vo danh sch vi tn ch thch cabn hoc bn su tm. C gng c 15 ngy ti ramt bn lu tr. Mi thc mc v yu cu linh vi: Nguyn Hu in

    Hanoi University of ScienceCenter for High-Performance Computing334 Nguyen Trai, Thanh Xuan, HanoiOffice (84-4) 557 2869

    Danh sch bi k nyBi 4.1 Tng on . . . . . . . . . . . . . . . . . 1Bi 4.2 on n iu di nht . . . . . . . . 2Bi 4.3 Dy Farey . . . . . . . . . . . . . . . . . 3Bi 4.4 Thip mi . . . . . . . . . . . . . . . . . 5Bi 4.5 Ly tha 2, 3 v 5 . . . . . . . . . . . . 6

    Danh sch chng trnh

    1 tongdoan.pas . . . . . . . . . . . . . . . . 22 dondieu.pas . . . . . . . . . . . . . . . . . 33 dayfarey.pas . . . . . . . . . . . . . . . . . 44 function . . . . . . . . . . . . . . . . . . . 65 Ly tha ca 2,3,5-luythua.pas . . . . . . 7

    Bi 4.1 (Tng on) Mt dy con gm cc phn t lintip nhau trong mt dy cho trc c gi l on. Chody gm N s t nhin. Tm on ngn nht c tng ccphn t bng gi tr K cho trc.

    nh dng tp vo: Tp vn bn tongdoan.inpDng th nht: hai s t nhin Nv K, 1 N 2000.

    T dng th hai tr i: cc phn t ca dy.nh dng tp ra: Tp vn bn tongdoan.outCha mt dng duy nht gm hai s t nhind ch s u on v L s phn t trong on (chiu dion). Nu v nghim th ghi 0 0.

    Trong cc tp, d liu trn cng dng cch nhau quadu cch.

    V d.

    tongdoan.inp tongdoan.out21 17

    0 2 3 2 10

    1 5 5 6 12

    2 0 3 0 1 4 8 0

    1 1 0 6 0 0

    5

    16 3

    Li gii 4.1. Ta gii bng k thut ca strt nh sau. Xt on a[i..j] vi tngS = a[i] + a[i + 1] + . . . + a[j], i j. on ny cgi l ca s. Ta cho ca s ny trt dn qua phi vxt ba tnh hung sau y.

    1) (S = K): ta ghi nhn im u i v di onlj i + 1.NudinynhhndiLMinthtacp nht li cc gi tr iMin v Lmin (th tc Update).

    Ri tip tc xt ca s mi l a[i + 1..j].

    2) (S < K): Ta dch u phi ca ca s t j sangj + 1, gi nguyn u tri (th tc Right).

  • 8/3/2019 laptrinh-04-2012

    2/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    3) (S > K): Ta co u tri ca ca s t i thnhi + 1 (th tc Left).

    Ta t phn t a[n + 1] = 0 lm lnh canh.

    Chng trnh 1: tongdoan.pas

    1 programtongdoan;2 uses crt ;

    3 const4 mn = 2001; bl = #32;5 fn = tdoan.inp ; gn = tdoan.out ;6 type mw1 = array[0..mn] ofword;7 var f ,g : text;8 n,k: word;

    9 a: mw1;10 iMin, LMin: word;11 iLeft , iRight : word;

    12 sum: word;

    14 procedure Doc;15 var i : word;16 begin17 assign(f,fn); reset( f ) ; readln(f,n, k);18 for i := 1 to n do read(f,a[i ]) ;19 close( f ) ;20 end;21 procedure Left;22 begin

    23 sum := sum a[iLeft]; iLeft := iLeft + 1;24 if ( iLeft > iRight) then25 begin iRight := iLeft ; sum := a[ iLeft ]; end;26 end;

    28 procedure Right;29 begin iRight := iRight + 1;

    30 sum := sum + a[iRight];31 end;

    33 procedure Update;34 begin35 if (LMin > iRight iLeft + 1) then36 begin iMin := iLeft ;37 LMin := iRight iLeft + 1;38 end;39 Left;

    40 end;

    42 procedure XuLi;43 begin44 iLeft := 1; iRight := iLeft ;45 LMin := n + 1; sum := a[1];

    46 repeat47 if (sum = k) then Update48 else if (sum < k) then Right49 else { sum > k } Left;50 until ( iRight > n);51 if (LMin = n+1) then LMin := 0;52 end;

    54 procedure Ghi;55 begin56 assign(g,gn); rewrite(g);57 writeln(g,iMin,bl,LMin);58 close(g);59 end;60 BEGIN61 Doc; XuLi; ghi;62 END.

    Bi 4.2 (on n iu di nht) Cho dy gm Ns nguyn. Tm on n iu (khng gim hoc khng

    tng) c chiu di ln nht.nh dng tp vo: Tp vn bn dondieu.inp .Dng th nht: s t nhin N, 1 N 20000.T dng th hai tr i: cc phn t ca dy.

    nh dng tp ra: Tp vn bn dondieu.out.Cha mt dng duy nht gm hai s t nhin d ch su on v L s phn t trong on (chiu di on).Trong cc tp, d liu trn cng dng cch nhau qua ducch.

    V d.

    .inp .out12

    1 5 5 1 3

    3 3 5 7 9

    1 2

    4 7

    Li gii 4.2. Nhn xt: on c 1 phn t l onn iu (tng, gim),

    on gm mt dy lin tip cc phn t bngnhau l on n iu (tng, gim).

    Ta dng hai bin m cc phn t tng hoc bngnhau lin tip, dt v m cc phn t gim hoc bngnhau lin tip, dg. Nu ai = ai1 ta tng ng thi dtv dg1 n v. Nu ai > ai1 ta tng dt thm 1 n vv t li dg = 1. Nu ai < ai1 ta tng dg thm 1 n

    Nguyn Hu in 2/7 http://nhdien.wordpress.com

  • 8/3/2019 laptrinh-04-2012

    3/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    v v chnh li dt = 1. Sau mi bc ta cp nht onn iu di nht tm c. Chng trnh Pascal cv x l trc tip file input.

    phc tp: cN.

    Cc bin tng th:

    n: s lng phn t,

    dt: m s phn t trong dy tng,

    dg: m s phn t trong dy gim.

    iMax: ch s u ca on n iu di nht,

    MaxLen:chiudi(sphnt)caonniudi nht.

    Chng trnh 2: dondieu.pas

    1 program DonDieu;2 uses crt ;3 const4 bl = #32;5 fn = dondieu.inp ; gn = dondieu.out ;6 var f ,g : text;7 n: integer;8 dt,dg: integer;9 iMax, MaxLen: integer;

    10 function Max(a,b,c: integer) : integer;11 begin12 if (a < b) then a := b; { a = Max(a,b) }13 if (a > c) then Max := a14 else Max := c;15 end;16 procedure XuLi;17 var i ,m,x,y: integer;

    18 begin19 assign(f,fn); reset( f ) ;20 readln(f,n); read(f,x);21 dt := 1; dg := 1;22 MaxLen := 1; iMax := 1;23 for i := 2 to n do24 begin25 read(f,y);26 if (y = x) then27 begin dt := dt + 1; dg := dg + 1; end28 else if (y > x) then29 begin dt := dt + 1; dg := 1; end30 else { y < x }31 begin dg := dg + 1; dt := 1; end;32 m := Max(MaxLen, dt, dg);33 if (m > MaxLen) then34 begin35 MaxLen := m; iMax := i MaxLen + 1;36 end;37 x := y;38 end;39 close( f ) ;40 end;41 procedure Ghi;42 begin43 assign(g,gn); rewrite(g);44 writeln(g, iMax, bl , MaxLen); close(g);45 end;46 BEGIN47 XuLi; Ghi;48 END.

    Bi 4.3 (Dy Farey) Cho s t nhin N > 0. hy litk theo trt t tng dn cc phn s t/m tha ng thi cctnh cht sau:

    - t/m l phn s ti gin bin thin trong khong 0..1,- m bin thin trong khong 1..N.

    nh dng tp vo: Tp vn bn FAREY.INPcha s N.

    nh dng tp ra: Tp Dng th nht: D s lng ccphn s trong dy.

    T dng th hai: mi dng hai s t nhin tm ghi cchnhau qua du cch, th hin mt phn s trong dy sptng.

    V d.

    farey.inp farey.out5 11

    0 1

    1 5

    1 41 3

    2 5

    1 2

    3 5

    2 3

    3 4

    4 5

    1 1

    Li gii 4.3. Nu sinh ln lt cc phn s ri spxp th kh tn b nh v ti a phi dnh b nh lu tr n2 phn s.

    Nguyn Hu in 3/7 http://nhdien.wordpress.com

  • 8/3/2019 laptrinh-04-2012

    4/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    Phng n 1. Nu t/m v a/b l hai phn s slin tip trong dy Farey th

    a/b = min{x/y|x/y > t/m,y = 1..n, x y, (x,y) = 1}

    trong (x,y) l c chung ln nht ca x v y.

    Cc phn s x/y trong tp trn c gi l ccng vin. Ta s c cng t ng vin cng tt. Viy = 1, do x y nn ta c ngay phn s 1/1 l phnt ln nht trong dy.

    Vi mi y = 2..n ta xt phn s x/y l phn s utin ln hn t/m.

    Ta c t t/m < x/y ta suy ra mx > ty nnx > (tydivm). Nu bit m ta chn x = (tydivm) + 1

    s thu c phn s x/y tha ng thi cc tnh chtsau:

    - 1 m n

    - x/y l phn s u tin ln hn t/m.

    c t trn c thu gn li vi n 1 ng vinnh sau,

    a/b = min{x/y|y = 2..n, x = (tydivm) + 1}

    Nh vy, nu sinh c phn s t/m cho dyFarey th phn s tip theo a/b s c chn l phns nh nht trong tp n 1 phn s ni trn. rng 0/1 l phn s u tin v 1/1 l phn scui cng ca dy Farey. Th tc Next(n, t,m) trongphng n 1 s xc nh phn s a/b st sau phns t/m trong dy Farey. Gi tr tm c s t ngaytrong t/m.

    phc tp. Xut pht t phn s u tin 0/1,mi ln ta phi sinh ra n 1 ng vin t chn

    ra 1 phn s trong dy. Nu dy c s phn s th taphi thc hin s(n 1) php ton trn cc phn s.Gi tr max ca s l n2. Vy phc tp tnh ton vocn3.

    Phng n 2. Ta c th sinh dn cc phn t chody Farey nh sau. Cho hai phn s a/b v c/d, phns (a + c)/(b + d) c gi l phn s trung bnh cahai phn s ny.

    Nhn xt. Nu t1/m1, t2/m2, t3/m3 l ba phn s

    lin tip trong dy Farey th phn s gia l phn strung bnh ca hai phn s kia.

    Ta c thut ton sau:

    Xut pht vi mu s m = 1 ta c dy 2 phn s:0/1, 1/1.

    Vi mi mu sm = 2..n ta sinh cc phn s trungbnh c mu s m ca hai phn s k nhau trong dytrc v xen phn s ny vo gia hai phn s sinh ra

    n dn vo trong dy kt qu.

    m = 2: thm cc phn s trung bnh vi mu bng2: 0/1, 1/2,1/1.

    m = 3: thm cc phn s trung bnh vi mu bng3: 0/1, 1/3,1/2,2/3,1/1.

    ...

    Cc phn s mi sinh trong mi ln duyt cgch di.

    Ta dng hai mng: a lu cc phn s ca dytrc, b lu cc phn s ca dy sau. Sau mi bclp ta chuyn b qua a. D liu c m t nh sau:

    1 const mn = 1000;2 type3 PS = record tu,mau: byte end;4 mps = array[0..mn] ofPS; { mng cc PS }5 var a,b: mps;

    phc tp. Thi gian: n3, min nh : 2 mng kch

    thc n2.Phng n 3. Ta s dng mt s tnh cht

    ca dy Farey tip tc ci tin thut ton. Nut1/m1, t2/m2, t3/m3 l ba PS lin tip trong dy Fareyth

    1. t2m1t1m2 = 1,

    2. m1 + m2 > n,

    3. t2/m2 = (t1 + t3)/(m1 + m3),

    4. t3 = vt2t1,m3 = vm2

    m1viv = (m1 + n)divm2.

    T tnh cht 4 ta suy ra ngay cch xc nh PSt3/m3 thng qua hai PS st trc.

    Cc trnh di y minh ha 3 phng n vi cckt qu hin th trn mn hnh bn c c th theodi.

    Chng trnh 3: dayfarey.pas

    1 (2 Ba phuong an cho bai Day Farey

    3 )4 program dayfarey;5 uses crt ;

    6 const bl = #32; nl = #13#10;

    Nguyn Hu in 4/7 http://nhdien.wordpress.com

  • 8/3/2019 laptrinh-04-2012

    5/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    7 var n: integer;8 { Uoc chung lon nhat cua hai so tu nhien a, b }9 function Ucln(a,b:integer) : integer;

    10 var r : integer;11 begin12 while b > 0 do13 begin14 r := a mod b; a := b; b:=r15 end;16 Ucln:=a;

    17 end;

    19 { Rut gon PS a/b thanh PS t/m }20 procedure RutGon(a,b:integer; var t,m:integer);21 var d: integer;22 begin23 d :=Ucln(a,b); t := a div d; m := b div d;24 end;

    26 { Tim PS sat sau PS t/m, ket qua dat trong t/m }27 function Next(n:integer;var t,m:integer):Boolean;28 var a,b,x,y: integer;29 begin30 if (t+m=2) then31 begin32 Next := false ; exit33 end;34 a := 1; b := 1;

    35 for y := 2 to n do36 begin37 x := ty div m + 1;38 if ay > bx then39 begin40 a := x; b:=y41 end;42 end;43 RutGon(a,b,t,m); Next := true;44 end;

    46 procedure Farey1(n: integer);47 var t,m,d:integer;48 begin49 writeln(nl,Farey1); d := 0;50 t := 0; m := 1;51 repeat52 write(t , / ,m,bl); inc(d);53 until not Next(n,t,m);54 writeln(nl,Total:,d,PS);55 readln;56 end;57 procedure Farey2(n: byte);

    58 const mn = 1000;59 type PS = record tu,mau: byte end;60 mps1 = array[0..mn] ofPS;61 var a,b: mps1; { 2 day PS a , b }62 d,k,i,m:integer;63 begin64 writeln(nl,Farey2); d := 2;65 a [1]. tu := 0; a [1]. mau := 1; { PS dau day }66 a [2]. tu := 1; a [2]. mau := 1; { PS thu hai }67 for m:=2 to n do68 begin69 k := 0; inc(k); b[k] := a[k];70 for i := 2 to d do71 begin72 if a[ i ]. mau+a[i1].mau = m then73 begin74 inc(k); b[k].tu := a[i1].tu + a[i ]. tu;75 b[k].mau := a[i1].mau + a[i].mau;76 end;77 inc(k); b[k] := a[ i ];78 end;79 a := b; d := k;

    80 end;81 for i := 1 to d do82 write(a[i ]. tu, / ,a[ i ]. mau,bl);83 writeln(nl , Total, d, PS);84 readln;85 end;86 procedure Farey3(n: integer);87 var t1,m1,t2,m2,t3,m3,v,d: integer;88 begin89 writeln(nl,Farey3); d := 2;90 t1 := 0; m1 := 1; { PS dau day }91 t2 := 1; m2 := n; { PS thu hai }92 write(t1,/,m1,bl,t2,/,m2,bl);93 while (t2 + m2 2) do94 begin95 v := (m1+n) div m2;96 t3 := vt2 t1; m3 := vm2 m1;97 write(t3, / ,m3,bl); inc(d);98 t1 := t2; t2 := t3;99 m1 := m2; m2 := m3;

    100 end;101 writeln(nl,Total,d,PS); readln;102 end;103 BEGIN104 n := 5;105 Farey1(n); Farey2(n); Farey3(n);

    106 END.

    Bi 4.4 (Thip mi)

    Nguyn Hu in 5/7 http://nhdien.wordpress.com

  • 8/3/2019 laptrinh-04-2012

    6/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    Minh mun lm mt thip chc tt Qu Mi c nnc to bi 2n dng, mi dng l mt dy k t gm nch ci Q v M sao cho hai dng k nhau khc nhau ting mt v tr, dng cui cng cng c coi l k vidng u tin. Gi s bn c th gip Minh lm iu .

    Vi mi gi tr n v k cho trc bn hy hin th dng thk trong tm thip trn. Cc dng c m s t 1 tr i,1 n 30.

    Li gii 4.4. K hiu T(n) l tm thip c thitk vi gi tr n cho trc. T(n) dng y s cha2n dng. T(1) cha hai dng l Q v M. Gi s ta thit k xong T(n 1), khi T(n) s c thit ktheo 3 bc sau.

    Bc 1. Lt: Lt T(n1

    ) xung pha di, tc lly i xng qua ng k ngang cui tm thip. Tak hiu phn i xng ca T(n 1) l T (n 1).

    Bc 2. Thm Q: Vit thm k t Q vo mi dyca T(n 1).

    Bc 3. Thm M: Vit thm k t M vo mi dyca T (n 1).

    Ta c th vit thm k t vo u hoc cui dy.Trong bi ny ta chn u dy.

    D dng chng minh rng thut ton trn sinh racc tm thip tha cc yu cu ca u bi. Tht vy,ta gi P l tnh cht "Hai dng k nhau khc nhau ting mt v tr". Khi T(1) tha P l hin nhin vn ch cha 2 dng Q v M. Gi s T(n 1) tha P.Khi ng nhin T (n 1) cng tha P. Do phpi xng, dng cui cng ca T(n 1)v dng u

    tin ca T (n 1) ging nhau nn khi thm Q chodng trn v M cho dng di chng s khc nhau tiv tr thm . Tng t, dng u tin ca T(n 1)v dng cui cng ca T*(n-1) ging nhau nn khithm Q cho dng u v M cho dng cui chng s

    khc nhau ti v tr thm.Da theo thut ton trn ta vit hm Line(n, k)

    sinh ra dng th k trn tm thip T(n). Th d,Line(3, 7) = MQM. Hm s lp n ln, mi ln sinh1 k t theo chiu ngc li vi kin thit trn. Tathy, nu k > 2n 1 th chng t dng k nm trongT (n 1), do k t u dng ca n s phi lM v dng t T(n 1) lt xung dng k s c ch s2n k + 1, ngc li, nu k 2n 1 th dng k nm

    trong T(n 1), do k t u dng ca n l Q.

    Chng trnh 4: function

    1 function Line(n: integer; k: longint ): string ;2 var s: string ; m: longint ; i : integer;3 begin4 m := 1; m := m shl n; { m = 2^n }5 for i := n downto 1 do6 begin7 m := m shr 1; { m div 2 }8 if (k

  • 8/3/2019 laptrinh-04-2012

    7/7

    LP TRNH = ++THUT TONS 4, 15 - 2 - 2012

    (i) 1 S

    (ii) Nu x S th 2x, 3x, 5x S.

    Gi s cc phn t trong S c sp tngv ta tm c phn t th i. Ta k hiuS(i) = {a1, a2, . . . , a

    i}. tm phn t th i + 1 ta

    nhn xt

    ai+1 = min2x, 3y, 5z|x,y, z S(i), 2x > ai, 3y > ai, 5z > ai

    Ta s dng 3 bin i2, i3, i5 ghi nhn cc ch strong S sao cho ai2 = x, ai3 = y v ai5 = z. Cc bina[1], i2, i3 v i5 c khi tr 1.

    Khi hm Next(i) sinh phn t st sau phn t

    A[i] s nh sau:

    1 function Next(i: integer) : integer;2 begin3 while (a[i2] 2