së gi¸o dôc - ®µo t¹o Qu¶ng b×nh kú thi chän häc sinh giái líp 12 n¨m häc 2006-2007 §Ò chÝnh thøc - m«n : tin häc (vßng 2) SBD: Thêi gian lµm bµi: 180 phót. §Ò ra C©u 1: (3,0 ®iÓm) Chia b¸nh (tªn file bµi lµm CAKE.PAS) Trong buæi tèi trung thu cã mét c¸i b¸nh h×nh trßn. B¸nh ®îc viÒn quanh bëi N qu¶ d©u vµ qu¶ sim. Yªu cÇu: T×m c¸ch c¾t b¸nh b»ng mét nh¸t dao ®Ó ®îc hai phÇn sao cho sè lîng qu¶ d©u ë phÇn nµy b»ng sè lîng qu¶ d©u ë phÇn kia vµ sè lîng qu¶ sim ë phÇn nµy b»ng sè lîng qu¶ sim ë phÇn kia. D÷ liÖu vµo: Cho trong file CAKE.INP cã cÊu tróc nh sau: Dßng 1: Ghi sè nguyªn d¬ng N lµ sè lîng qu¶ d©u vµ qu¶ sim ë trªn viÒn b¸nh (1 ≤ N ≤ 255). Dßng 2: Ghi d·y gåm N ký tù “D” hoÆc “S” ghi liÒn nhau. C¸c vÞ trÝ g¾n qu¶ trªn b¸nh ®îc ®¸nh sè tõ 1 ®Õn N theo chiÒu kim ®ång hå b¾t ®Çu tõ mét vÞ trÝ tuú ý. D÷ liÖu ra: Ghi ra file CAKE.OUT theo cÊu tróc nh sau: Dßng 1: NÕu t×m ®îc c¸ch chia th× ghi hai sè nguyªn d¬ng a, b (a ≤ b) cho biÕt c¸c qu¶ ë vÞ trÝ a, a+1, ..., b lµ c¸c qu¶ thuéc cïng mét trong hai phÇn b¸nh. NÕu kh«ng t×m ®îc c¸ch chia th× ghi sè 0. VÝ dô: CAKE.INP CAKE.OUT CAKE.INP CAKE.OUT 6 3 5 5 0 DSSSDS DSDDS C©u 2: (3,5 ®iÓm) M· ho¸ x©u nhÞ ph©n (tªn file bµi lµm BINCODE.PAS) Ngêi ta m· ho¸ mét x©u nhÞ ph©n gåm c¸c ký tù 0 vµ 1 nh sau : Víi mét x©u nhÞ ph©n S, m· ho¸ cña nã lµ mét m¶ng T chøa c¸c sè nguyªn kh«ng ©m sao cho T[1] b»ng 0 hoÆc b»ng 1 tuú theo ký tù ®Çu tiªn cña S lµ 0 hay 1. NÕu T[1]=0 th× tÝnh tõ tr¸i sang ph¶i cña x©u S, lÇn lît T[2] b»ng sè ký tù 0 liªn tiÕp, T[3] b»ng sè ký tù 1 liªn tiÕp, T[4] b»ng sè ký tù 0 liªn tiÕp... cho ®Õn hÕt x©u S. Yªu cÇu: Cho mét x©u nhÞ ph©n S, h·y x¸c ®Þnh m¶ng T theo c¸ch m· ho¸ trªn. D÷ liÖu vµo: Cho trong file v¨n b¶n BINCODE.INP, cã cÊu tróc nh sau: Dßng 1: Ghi sè N lµ sè lîng x©u nhÞ ph©n cÇn m· ho¸ (1 ≤ N ≤ 100). N dßng tiÕp theo: Mçi dßng ghi mét x©u nhÞ ph©n S (1 ≤ length(S) ≤ 100). D÷ liÖu ra: Ghi ra file v¨n b¶n BINCODE.OUT, theo cÊu tróc nh sau: N dßng: Mçi dßng ghi m¶ng T lµ kÕt qu¶ m· ho¸ cña x©u nhÞ ph©n t¬ng øng. C¸c sè trªn cïng mét dßng ®îc ghi c¸ch nhau mét dÊu c¸ch. 1 VÝ dô: BINCODE.INP 2 0001111100111 10001111100111 BINCODE.OUT 0 3 5 2 3 1 1 3 5 2 3 C©u 3: (3,5 ®iÓm) H×nh ch÷ nhËt (tªn file bµi lµm: HCN.PAS) Cho N h×nh ch÷ nhËt trªn mÆt ph¼ng to¹ ®é sao cho c¸c c¹nh song song víi c¸c trôc to¹ ®é. C¸c h×nh ch÷ nhËt ®îc ®¸nh sè tõ 1..N. H×nh ch÷ nhËt i ®îc gäi lµ bao h×nh ch÷ nhËt j nÕu c¶ bèn ®Ønh cña h×nh ch÷ nhËt j ®Òu n»m trong hoÆc n»m trªn c¸c c¹nh cña h×nh ch÷ nhËt i. Yªu cÇu: T×m d·y c¸c h×nh ch÷ nhËt bao nhau sao cho sè lîng c¸c h×nh bao nhau lín nhÊt. D÷ liÖu vµo: Cho trong file v¨n b¶n HCN.INP, cã cÊu tróc nh sau: Dßng 1: Ghi sè nguyªn N, lµ sè lîng h×nh ch÷ nhËt (1 ≤ N ≤ 1000). N dßng tiÕp theo: Mçi dßng ghi bèn sè nguyªn x1, y1, x2, y2 lÇn lît lµ hoµnh ®é, tung ®é cña c¸c ®Ønh tr¸i trªn, ph¶i díi cña mét h×nh ch÷ nhËt (-10000 < x 1 , y1, x2, y2 < 10000) D÷ liÖu ra: Ghi ra file v¨n b¶n HCN.OUT, theo cÊu tróc nh sau : Dßng 1: Ghi sè nguyªn k lµ sè lîng c¸c h×nh ch÷ nhËt bao nhau lín nhÊt t×m ®îc. VÝ dô: HCN.INP HCN.OUT 6 2 1 5 2 2 2 4 3 3 1 5 5 2 4 3 8 1 5 6 8 4 6 6 8 5 HÕt 2 Híng dÉn chÊm ®Ò thi chÝnh thøc häc sinh giái líp 12 - vßng 2 n¨m häc 2006-2007 I/ Ph¬ng ph¸p chung - Gi¸m kh¶o t¹o c¸c bé d÷ liÖu vµo, tÝnh to¸n kÕt qu¶. Ch¹y ch¬ng tr×nh cña häc sinh vµ so s¸nh kÕt qu¶. - Gi¸m kh¶o cã thÓ sö dông ch¬ng tr×nh gîi ý ®Ó tÝnh kÕt qu¶ cña d÷ liÖu vµo: CAKE.PAS BINCODE.PAS HCN.PAS - Ch¬ng tr×nh häc sinh ch¹y ®óng mçi bé test, gi¸m kh¶o cho 0,5 ®iÓm. Nh vËy, nÕu c©u hái cã 3,0 ®iÓm th× gi¸m kh¶o ph¶i t¹o ®îc 6 bé test. - NÕu ch¬ng tr×nh ch¹y sai test nµo th× gi¸m kh¶o cho 0 ®iÓm ®èi víi test ®ã. - Bµi to¸n cã thÓ cã nhiÒu kÕt qu¶ ®óng, nÕu kÕt qu¶ cña häc sinh kh¸c víi ®¸p ¸n nhng vÉn ®óng th× gi¸m kh¶o vÉn cho ®iÓm tèi ®a. II/ Ch¬ng tr×nh gîi ý: C©u 1: CAKE.PAS {$r+} Const fi='Cake.INP'; fo='Cake.OUT'; Var A:String; N:Byte; f:Text; Procedure Read_file; Begin Assign(f,fi); Reset(f); Readln(f,n); Read(f,A); Close(f); End; Procedure Xuli; Var i,sd,d,j,n1:Byte; st:String; Begin If n mod 2 = 1 then Begin Writeln(f,0); Close(f); Halt; End; d:=0; For i:=1 to n do If A[i]='D' then Inc(d); If d mod 2 = 1 then Begin Writeln(f,0); Close(f); Halt; End; n1:=n div 2; For i:=1 to n1 do Begin sd:=0; st:=copy(a,i,n1); For j:=1 to n1 do If st[j]='D' then Inc(sd); If sd=(d div 2) then Begin Write(f,i,' ',i+n1-1); Close(f); Halt; End; End; End; Begin Read_file; Assign(f,fo); Rewrite(f); Xuli; Close(f); End. 3 C©u 2 : BINCODE.PAS program const bincode; fi='bincode.inp'; fo='bincode.out'; type mmcs=array[1..100] of string; var f:text; a:mmcs; n:word; procedure doc; var i:word; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do readln(f,a[i]); close(f) end; procedure xl; var i,j,x:word; st,s1:string; begin assign(f,fo);rewrite(f); for i:=1 to n do begin st:=a[i]; while st[1]=' ' do delete(st,1,1); while st[length(st)]=' ' do delete(st,length(st),1); write(f,st[1],' '); while st'' do begin if st[1]='1' then begin x:=pos('0',st); if x0 then s1:=copy(st,1,x-1) else begin s1:=st;x:=length(st)+1;end; delete(st,1,x-1); write(f,length(s1),' '); end; if st[1]='0' then begin x:=pos('1',st); if x0 then s1:=copy(st,1,x-1) else begin s1:=st;x:=length(st)+1;end; delete(st,1,x-1); write(f,length(s1),' '); end; end; writeln(f); end; close(f); end; begin doc; xl; end. C©u 3: HCN.PAS {$R+,Q+,S+} const INP ='hcn.inp'; OUT ='hcn.out'; MAX = 1000; var x1,y1,x2,y2,kq :array [1..MAX] of integer; n : integer; fi,fo : text; procedure input; var i : integer; 4 begin assign(fi,INP); reset(fi); read(fi,n); for i := 1 to n do read(fi,x1[i],y1[i],x2[i],y2[i]); close(fi); end; function area(i : integer) : longint; begin area:=longint(abs(x1[i]-x2[i]))*longint(abs(y1[i]-y2[i])); end; procedure qsort(l,r : integer); var i, j, mid, t : integer; begin mid := (1 + r) div 2; i := 1; j:= r; repeat while area(i) < area(mid) do inc(i); while area(j) > area(mid) do dec(j); if i j; if i < r then qsort(1,j); end; function bao(i,j : integer) : integer; begin if (x1[i]= y1[j])and(x2[i]>= x2[j])and (y2[i] tmp then tmp := kq[i]; {if tmp = 1 then tmp := -1;} assign(fo,OUT); rewrite(fo); writeln(fo,tmp); close(fo); end; begin input; qsort(1,n); progress; output; end. HÕt 5 ... 8 6 Hết Hớng dẫn chấm đề thi thức học sinh giỏi lớp 12 - vòng năm học 2006-2007 I/ Phơng pháp chung - Giám khảo tạo liệu vào, tính toán kết Chạy chơng trình học sinh so sánh kết - Giám khảo sử... đợc test - Nếu chơng trình chạy sai test giám khảo cho điểm test - Bài toán có nhiều kết đúng, kết học sinh khác với đáp án nhng giám khảo cho điểm tối đa II/ Chơng trình gợi ý: Câu 1: CAKE.PAS... sinh so sánh kết - Giám khảo sử dụng chơng trình gợi ý để tính kết liệu vào: CAKE.PAS BINCODE.PAS HCN.PAS - Chơng trình học sinh chạy test, giám khảo cho 0,5 điểm Nh vậy, câu hỏi có 3,0 điểm giám