Sở Gd&Đt kỳ thi CHọN học sinh giỏi lớp 11 thpt Quảng bình năm học 2012 - 2013 Môn thi: tin học Đề thi chính thức (Khóa thi ngày 27 tháng 3 năm 2013) Số Báo Danh: Thời gian làm bài: 180 phút (không kể thời gian giao đề) ( thi gm cú 02 trang) RA S dng ngụn ng lp trỡnh Turbo Pascal lp trỡnh gii cỏc bi toỏn sau: Cõu 1: (3,0 im) Tỡm s TIMSO.PAS Cho s nguyờn dng X, khi o ngc trt t cỏc ch s ca X ta s thu c mt s nguyờn dng Y, Y c gi l s o ngc ca X. Vớ d: X = 613 thỡ Y = 316 l s o ngc ca X. S nguyờn dng Y c gi l s nguyờn t nu nú ch cú hai c s l 1 v chớnh nú, s 1 khụng phi l s nguyờn t. Cho hai s nguyờn dng P v Q (1 P Q 2ì10 9 ; Q - P 10 5 ). Yờu cu: Hóy tỡm tt c cỏc s nguyờn dng X nm tha món P X Q v s o ngc ca s X l s nguyờn t. D liu vo: Cho trong file vn bn TIMSO.INP cú cu trỳc nh sau: - Dũng 1: Ghi hai s nguyờn dng P Q, hai s c ghi cỏch nhau ớt nht mt du cỏch. D liu ra: Ghi ra file vn bn TIMSO.OUT trờn nhiu dũng, mi dũng ghi mt s nguyờn X tỡm dc. Vớ d: TIMSO.INP TIMSO.OUT 10 19 11 13 14 16 17 Cõu 2: (3,5 im) Tớnh tng TONG.PAS Cho hai s nguyờn dng M v N, M cú p ch s v N cú q ch s. Yờu cu: Tớnh tng ca hai s M v N. D liu vo: Cho trong file vn bn TONG.INP cú cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng p l s lng ch s ca M (1 p 30000). - Dũng 2: Ghi p ch s ca M theo th t t trỏi sang phi, cỏc ch s c ghi cỏch nhau ớt nht mt du cỏch. - Dũng 3: Ghi s nguyờn dng q l s lng ch s ca N (1 q 30000). - Dũng 4: Ghi q ch s ca N theo th t t trỏi sang phi, cỏc ch s c ghi cỏch nhau ớt nht mt du cỏch. D liu ra: Ghi ra file vn bn TONG.OUT theo cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng k l s lng ch s ca tng tỡm c. - Dũng 2: Ghi k ch s ca tng tỡm c theo th t t trỏi sang phi, cỏc ch s c ghi cỏch nhau ớt nht mt du cỏch. Vớ d: 1/2 TONG.INP TONG.OUT 6 2 2 3 2 3 9 3 2 4 7 6 2 2 3 4 8 6 (Có 85% số test với p, q ≤ 20000; 15% số test với p, q >20000 ). Câu 3: (3,5 điểm) Dãy con chung dài nhất DAYCON.PAS Cho dãy số nguyên A gồm N phần tử a 1 , a 2 , , a N và dãy số nguyên B gồm M phần tử b 1 , b 2 , , b M . Các phần tử trong một dãy số có giá trị khác nhau từng đôi một. (1 ≤ a i , b j ≤ 2×10 9 ; 1 ≤ N ≤ 100; 1 ≤ i ≤ N; 1 ≤ M ≤ 100; 1 ≤ j ≤ M). Dãy C được gọi là dãy con của dãy A nếu dãy C nhận được từ dãy A bằng cách xóa đi một số phần tử và giữ nguyên thứ tự của các phần tử còn lại. Nếu dãy C là dãy con của dãy A và cũng là dãy con của dãy B thì dãy C được gọi là dãy con chung của hai dãy A và B. Yêu cầu: Hãy tìm dãy C là dãy con chung của hai dãy A và B sao cho số lượng phần tử của dãy C là lớn nhất. Dữ liệu vào: Cho trong file văn bản DAYCON.INP có cấu trúc như sau: - Dòng 1: Ghi số nguyên dương N là số lượng phần tử của dãy A. - Dòng 2: Ghi N số nguyên là giá trị của các phần tử trong dãy A, các số được ghi cách nhau ít nhất một dấu cách. - Dòng 3: Ghi số nguyên dương M là số lượng phần tử của dãy B. - Dòng 4: Ghi M số nguyên là giá trị của các phần tử trong dãy B, các số được ghi cách nhau ít nhất một dấu cách. Dữ liệu ra: Ghi ra file văn bản DAYCON.OUT theo cấu trúc như sau: - Dòng 1: Ghi số nguyên dương K là số lượng phần tử của dãy C. - Dòng 2: Ghi K số nguyên là giá trị của các phần tử trong dãy C, các số được ghi cách nhau một dấu cách. - Dòng 3: Ghi K số nguyên dương lần lượt là chỉ số của các phần tử trong dãy A tương ứng với các giá trị của phần tử đó trong dãy C, các số được ghi cách nhau một dấu cách. - Dòng 4: Ghi K số nguyên dương lần lượt là chỉ số của các phần tử trong dãy B tương ứng với các giá trị của phần tử đó trong dãy C, các số được ghi cách nhau một dấu cách. Ví dụ: DAYCON.INP DAYCON.OUT 6 9 3 1 12 6 15 5 3 12 7 6 15 4 3 12 6 15 2 4 5 6 1 2 4 5 ==HẾT== 2/2 Së GD&§T kú thi CHäN häc sinh giái líp 11 THPT Qu¶ng b×nh n¨m häc 2012 - 2013 M«n thi: tin häc híng dÉn chÊm I- Phương pháp: - Giám khảo tạo bộ dữ liệu vào, tính toán kết quả. Thực hiện 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 ý dưới đây để tính toán kết quả của dữ liệu vào. - Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng 01 bộ test giám khảo cho 0.5 điểm. Trong 06 bộ test giám khảo phải tạo được 01 bộ test có Q-P = 10 5 , 01 bộ test giá trị P, Q > 65535. - Đối với câu 2: Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test giám khảo cho 0.5 điểm. Trong 07 bộ test giám khảo phải tạo được 01 bộ test có P, Q > 20000. - Đối với câu 3: + Có thể có nhiều kết quả đúng, nếu học sinh đưa ra kết quả đúng nhưng khác với kết quả của giám khảo thì vẫn cho điểm tối đa. + Giám khảo phải tạo được 05 bộ test, chương trình học sinh đúng 01 bộ test giám khảo cho 0.7 điểm. + Đối với mỗi bộ test: Nếu học sinh đưa ra đúng số lượng phần tử của dãy con chung thì giám khảo cho 0.3 điểm, nếu đưa ra đúng dãy con chung giám khảo cho 0.2 điểm, nếu đưa ra đúng chỉ số của các phần tử trong dãy A và dãy B ban đầu thì giám khảo cho 0.2 điểm. Tổng điểm của mỗi test là 0.7 điểm. II- Chương trình gợi ý: Câu 1: (3,0 điểm) Tìm số Program Tim_so; Const fi='TIMSO.INP'; fo='TIMSO.OUT' ; Var P,Q:longint; Time:Longint; Times:Longint absolute 0:$46C; Function NT(K:longint):Boolean; Var Can,i:Longint; Begin If (K=2) or (K=3) then Begin NT:=True;Exit; End; If (K<2) or (K mod 2 = 0) or (K mod 3 = 0) then Begin NT:=False; Exit; End; NT:=True; i:=5; Can:=Trunc(sqrt(K)); While i<=Can do Begin if (K mod i = 0) or (K mod (i+2) =0) then Begin NT:=False; Exit; End ELse inc(i,6); End; End; Function Daoso(N:longint):longint; Var S:longint; Begin S:=0; While N<>0 do Begin S:=S*10+ (N mod 10); N:=N div 10; End; Daoso:=S; End; Procedure Read_Data; Var F:text; Begin 3/2 Assign(f,fi); Reset(f); Read(f,P,Q); Close(f); End; Procedure Write_Data; Var f:text; j:longint; Begin Assign(f,fo); Rewrite(f); for j:=P to Q do if NT(Daoso(j)) then Writeln(f,j); Close(f); End; BEGIN Time:=Times; Read_Data; Write_Data; Writeln((Times-Time)/18.2:0:2); Readln; END. Câu 2: (3,5 điểm) Tính tổng Program Tinh_tong; Const fi= 'TONG.INP'; fo= 'TONG.OUT'; MaxN=30000; Type mmc=Array [0 MaxN] of byte; Var N,M,Top:Longint; A,B:mmc;C:^mmc; Procedure Read_Data; Var f:text;i:Longint; Begin Assign(f,fi); Reset(f); Readln(f,N); For i:=1 to N do Read(f,A[i]); Readln(f); Readln(f,M); New(C); Fillchar(C^,Sizeof(C^),0); For i:=1 to M do Read(f,C^[i]); Close(f); End; Procedure Init; Var Tg,k:Longint; Begin If M=N then Begin Top:=N;B:=C^;Exit End; If N > M Then Begin Tg:=N-M; For K:=M Downto 1 do B[K+Tg]:=C^[K]; Top:=N; End Else Begin Tg:=M-N; For K:=N Downto 1 do B[K+Tg]:=A[K]; A:=C^; Top:=M; End; Fillchar(C^,Sizeof(C^),0); End; Procedure Process; Var i,Nguyen,Tg:Longint; Begin Nguyen:=0; For i:= Top Downto 0 do Begin Tg:=(A[i]+B[i]+Nguyen); C^[i]:= Tg mod 10; 4/2 Nguyen:=Tg Div 10; End; End; Procedure Write_Data; Var f:text;i:Longint; Begin Assign(f,fo); Rewrite(f); if C^[0]>0 then Begin Writeln(f,Top+1); Write(f,C^[0],' '); End Else Writeln(f,Top); For i:=1 to Top do Write(f,C^[i], ' '); Close(f); Dispose(C); End; BEGIN Read_Data; Init; Process; Write_Data; END. Câu 3: (3,5 điểm) Dãy con chung dài nhất Program Day_con; Const fi='DAYCON.INP'; fo='DAYCON.OUT'; MaxN=101; Type mmc=Array[0 MaxN] of Longint; mhc=Array[0 MaxN] of mmc; Var A,B,C:mmc; L:mhc; N,M,K:Longint; Time:Longint; Times: Longint absolute 0:$46C; Procedure Read_Data; Var f:Text; i:Longint; Begin Assign(f,fi); Reset(f); Readln(f,N); For i:=1 to N do Read(f,A[i]); Readln(f,M); For i:=1 to M do Read(f,B[i]); Fillchar(L,Sizeof(L),0); Close(f); End; Procedure Solution; Var i,j:Longint; Begin For i:=1 to N do For j:=1 to M do Begin if A[i] = B[j] then L[i,j]:=L[i-1,j-1]+1 Else Begin L[i,j]:=L[i,j-1]; If L[i-1,j] > L[i,j-1] then L[i,j]:=L[i-1,j]; End; End; End; Procedure Write_Data; 5/2 Var f:Text;i,j,Top:Longint;LA,LB:mmc; Begin Assign(f,fo); Rewrite(f); Writeln(f,L[N,M]); Top:=0; i:=N;j:=M; While (i>0) and (j>0) do Begin if A[i] = B[j] then Begin inc(Top); LA[Top]:=i; LB[Top]:=j; dec(i); dec(j); End Else if L[i-1,j] > L[i,j-1] then dec(i) Else dec(j); End; For i:=Top Downto 1 do Write(f,A[LA[i]],' '); Writeln(f); For i:=Top Downto 1 do Write(f,LA[i],' '); Writeln(f); For i:=Top Downto 1 do Write(f,LB[i],' '); Close(f); End; BEGIN Time:=Times; Read_Data; Solution; Write_Data; Writeln((Times-Time)/18.2:0:0); Readln; END. 6/2 . Sở Gd&Đt kỳ thi CHọN học sinh giỏi lớp 11 thpt Quảng bình năm học 2012 - 2013 Môn thi: tin học Đề thi chính thức (Khóa thi ngày 27 tháng 3 năm 2013) Số Báo Danh: Thời gian. 5 ==HẾT== 2/2 Së GD&§T kú thi CHäN häc sinh giái líp 11 THPT Qu¶ng b×nh n¨m häc 2012 - 2013 M«n thi: tin häc híng dÉn chÊm I- Phương pháp: - Giám khảo tạo bộ dữ liệu vào, tính toán kết quả. Thực hiện. 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 ý dưới đây để tính toán kết quả của dữ liệu vào. - Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học