Tải bản đầy đủ (.pdf) (10 trang)

Đề và đáp án thi HSG môn tin học tỉnh thanh hóa năm 2017 2018

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (317.14 KB, 10 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO
THANH HOÁ

KỲ THI HỌC SINH GIỎI CẤP TỈNH
Năm học: 2017-2018

ĐỀ CHÍNH THỨC

Môn thi: Tin học - Lớp 11 THPT
Thời gian: 180 phút (không kể thời gian giao đề)
Ngày thi: 09/03/2018
Đề này có 05 câu, gồm 02 trang.

Số báo danh
…………………….

Tổng quan…........................
bài thi:
Tên bài
File chương trình File dữ liệu vào
File kết quả
Bài 1 Hệ đếm
BAI1.*
BAI1.INP
BAI1.OUT
Bài 2 Tìm số nguyên tố
BAI2.*
BAI2.INP
BAI2.OUT
Bài 3 Taxi
BAI3.*


BAI3.INP
BAI3.OUT
Bài 4 Hamming
BAI4.*
BAI4.INP
BAI4.OUT
Bài 5 Số lớn nhất
BAI5.*
BAI5.INP
BAI5.OUT
Dữ liệu vào là đúng đắn, không cần phải kiểm tra. Trong các file dữ liệu vào, nếu dữ liệu trên
cùng một dòng thì được cách nhau bởi ít nhất 1 dấu cách. Dấu (*) trong tên file chương trình
biểu thị đuôi file tùy thuộc vào NNLT sử dụng ('pas' đối với NNLT PASCAL, ‘c’ đối với NNLT
C,...).
Bài 1 (5 điểm):Hệ đếm
Lần đầu tiên tiếp xúc với các vấn đề cơ sở Tin học, Mạnh ngỡ ngàng và thú vị khi được
làm quen với hệ đếm cơ số 2 (Hệ đếm nhị phân). Mạnh nghĩ ra một xâu kí tự chỉ bao gồm các
kí tự ‘0’ và ‘1’ biểu diễn một số tự nhiên N trong hệ đếm cơ số 2 và đố Hải tìm biểu diễn của
N trong hệ đếm cơ số 10 (Hệ đếm thập phân).
Ví dụ: Mạnh nghĩ ra xâu ‘00010101’ là biểu diễn của số tự nhiên 15 trong hệ đếm cơ số 2.
Yêu cầu: Hãy giúp Hải chuyển xâu kí tự biểu diễn số tự nhiên N trong hệ đếm cơ số 2 thành
xâu biểu diễn N trong hệ đếm cơ số 10.
Dữ liệu vào: Từ tệp văn bản BAI1.INP gồm một dòng duy nhất chứa xâu S có độ dài không
quá 32 ký tự.
Dữ liệu ra: Ghi ra tệp văn bản BAI1.OUT xâu biểu diễn của N trong hệ đếm cơ số 10.
Ví dụ:
BAI1.INP
BAI1.OUT
10101110
174

Bài 2 (5 điểm): Tìm số nguyên tố
- Tìm tất cả các số P lớn hơn M và nhỏ hơn N thỏa mãn các điều kiện sau:
+ Là số nguyên tố.
+ Tổng các chữ số của P phải chia hết cho k.
Dữ liệu vào: Từ tệp văn bản BAI2.INP: Gồm 3 số M, N, k (1 ≤ M,N,k ≤ 106) (các số cách
nhau ít nhất một dấu cách).
Dữ liệu ra: Ghi ra tệp văn bản BAI2.OUT gồm duy nhất 1 số là số lượng các số thỏa mãn yêu
cầu đầu bài.
Ví dụ:
BAI2.INP
BAI2.OUT
BAI2.INP
BAI2.OUT
2 35 2
6
1 10 11
0
Bài 3 (4 Điểm): Taxi
Trong dịp nghỉ hè các bạn học sinh lớp 12 dự định tổ chức dã ngoại đến biển Sầm Sơn và
sẽ đi bằng taxi. Các bạn được chia thành n nhóm, nhóm thứ i gồm Si bạn (1 ≤ Si ≤ 4) và mỗi
chiếc taxi chở tối đa 4 hành khách. Vậy lớp 12 cần thuê ít nhất bao nhiêu chiếc taxi để chở các
nhóm đi, với điều kiện là các bạn trong nhóm phải ngồi chung taxi (một taxi có thể chở một
nhóm trở lên).
Dữ liệu vào: Từ tệp văn bản BAI3.INP gồm:
- Dòng đầu chứa số nguyên n (1 ≤ n ≤ 105) (số lượng các nhóm học sinh)
1


- Dòng số 2 chứa dãy số nguyên S1, S2, ..., Sn (1 ≤ Si ≤ 4). Các số nguyên cách nhau bởi dấu
cách với Si là số học sinh trong nhóm thứ i.

Dữ liệu ra: Ghi ra tệp văn bản BAI3.OUT là 1 số nguyên duy nhất là số lượng tối thiểu xe taxi
cần thiết để chở tất cả học sinh đến nơi.
Ví dụ:
BAI3.INP
BAI3.OUT
5
4
12433
Bài 4 (3 điểm): Hamming
Dãy số nguyên dương tăng dần, trong đó ước nguyên tố của mỗi số không quá 5 được gọi
là dãy Hamming.
Như vậy, 10 = 2×5 sẽ là một số trong dãy Hamming, còn 26 = 2×13 không thuộc dãy
Hamming.
Phần đầu của dãy Hamming là 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, . . .
Yêu cầu: Cho s4
1 1 3 3 1 4
4 1 1 2 3 1
1 3 4 4 4 2
2 1 1 1 4 1
4 4 2 3 3 4
3 1 2 1 1 1
1 1 2 1 1 2

3
1
1
2
3
1
2

1
3
3
3
1
2
3
3
1
4

3
3
1
1
4
2
2
3
2
3
1
4
3
3
4
1
1

3

1
4
1
2
3
3
4
1
4
3
2
1
2
2
3
4

3
3
4
3
1
4
3
1
4
4
1
4
3

2
4
2
2

2
1
3
4
4
2
2
1
1
3
3
2
3
4
1
2
1

4
3
4
4
3
2
1

1
1
4
2
3
1
3
4
1
2

66

188

05
06
07
08
Từ Test 05 đến Test 08 có dữ liệu lớn nên tôi xin đính kèm tài liệu này. Các bạn có thể tải về
tham khảo

5


Bài 4 (3 điểm): Hamming
const fi='BAI4.inp';
fo='BAI4.out';
ti=1000000000;
var f,ff:text;

m,n,i,d,j,k,max3:longint;
a:array[1..100000] of longint;
b:array[1..10000] of int64;
m2:array[0..30] of int64;
m3:array[0..19] of int64;
m5:array[0..13] of int64;
{=====================================}
procedure QS(L,R:longint);
var i,j,g,tg:longint;
begin
i:=L;
j:=R;
g:=b[(i+j) div 2];
while i<=j do
begin
while b[i]inc(i);
while b[j]>g do
dec(j);
if i<=j then
begin
if ibegin
tg:=b[i];
b[i]:=b[j];
b[j]:=tg;
end;
inc(i);
dec(j);
end;

end;
if iif j>L then QS(L,j);
end;
{===================================}
begin
m2[0]:=1;
for i:=1 to 30 do
m2[i]:=m2[i-1]*2;
m3[0]:=1;
for i:=1 to 19 do
m3[i]:=m3[i-1]*3;
m5[0]:=1;
for i:=1 to 13 do
m5[i]:=m5[i-1]*5;
d:=0;
for i:=0 to 29 do
begin
m:=ti div m2[i];
max3:=0;
while m3[max3]<=m do
inc(max3);
for j:=0 to max3-1 do
begin
m:=ti div (m2[i]*m3[j]);
k:=0;
while m5[k]<=m do
begin

6



inc(d);
b[d]:=m2[i]*m3[j]*m5[k];
inc(k);
end;
end;
end;
QS(1,d);
assign(f,fi);
reset(f);
readln(f,n);
assign(ff,fo);
rewrite(ff);
k:=1;
for i:=1 to n do
begin
readln(f,m);
for j:=1 to d do
if b[j]=m then
break;
if b[j]=m then
writeln(ff,j)
else
writeln(ff,-1);
end;
close(f);
close(ff);
end.


Test
01

02

BAI4.INP
20
0
28
31
42
60
46
95
57
3
91
15
38
33
81
4
1
66
98
64
2
100
0
1

0
0
1
3
1
0
5

BAI4.OUT
-1
-1
-1
-1
26
-1
-1
-1
3
-1
11
-1
-1
31
4
1
-1
-1
27
2
-1

1
-1
-1
1
3
1
-1
5
3

7


3
0
1
1
18
0
20
16
19
1
14
4
26
20
27
2
14

19
20
36
40
66
4
74
75
44
33
82
47
2
27
71
109
105
92
59
74
197
13
215
91
128
146
74
51
182
295

17
233
22
82
287
287
390
371
243

-1
1
1
13
-1
14
12
-1
1
-1
4
-1
14
17
2
-1
-1
14
20
21

-1
4
-1
29
-1
-1
-1
-1
2
17
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
38
-1
-1
-1
-1
-1
-1
-1
-1
-1

-1
-1
-1
-1
50
-1

8


59
1
101
75
519
195
54
210
589
212
9
574
334
318
385
705
669
369
637
133

111
631
890
375
708
824
7
1172
1223
1121
864
463
518
1406
1171

1
-1
29
-1
-1
25
-1
-1
-1
8
-1
-1
-1
-1

-1
-1
-1
-1
-1
-1
-1
-1
59
-1
-1
-1
-1
-1
-1
82
-1
-1
-1
-1

03
04
05
06

Từ Test 03 đến Test 06 có dữ liệu lớn nên tôi xin đính kèm tài liệu này. Các bạn có thể tải về
tham khảo
Bài 5 (3 điểm): Số lớn nhất
const fi='Bai5.inp';

fo='Bai5.out';
var f:text;
X,Y:string;
n,m,i,j:longint;
C:array[0..200,0..200] of string;
begin
assign(f,fi);
reset(f);
readln(f,X);
readln(f,Y);
close(f);
n:=length(X);

9


m:=length(Y);
for i:=1 to n do
for j:=1 to m do
if X[i]=Y[j] then
begin
c[i,j]:=c[i-1,j-1]+X[i];
while (C[i,j]<>'') and (C[i,j][1]='0') do
delete(C[i,j],1,1);
end
else
if length(C[i,j-1])>length(C[i-1,j]) then
C[i,j]:=C[i,j-1]
else
if length(C[i-1,j])>length(C[i,j-1]) then

C[i,j]:=C[i-1,j]
else
if C[i,j-1]>C[i-1,j] then
C[i,j]:=C[i,j-1]
else
C[i,j]:=C[i-1,j];
assign(f,fo);
rewrite(f);
if c[n,m]='' then
begin
if (pos('0',X)>0) and (pos('0',Y)>0) then
write(f,0);
end
else
writeln(f,c[n,m]);
close(f);
end.

T
e
s
t
0
1
0
2
0
3

BAI5.INP


9999999900000000000
8765432100000000
1234567801234567989
989654321087654321
1234567890123456789012345678901234567890123
456789
9876543210987654321098765432109876543210987
654321
0 9876543210987654321012345678901234567890987
4 6543210987654321012345678901234567890123456
7890123456789098765432109876543210123456789
0123456789098765432109876543210000000000
1234567890123456789098765432109876543210123
4567890123456789098765432109876543210987654
3210987654321012345678901234567890987654321
0987654321012345678901234567890000000000
0
5
0
6

BAI5.OUT

0
989
989898989

9876543210987654321012345678901234
5678909876543210987654321098901234

5678901234567890987654321098765432
1012345678901234567890000000000

Từ Test 05 đến Test 06 có dữ liệu lớn nên tôi xin đính kèm tài liệu này. Các bạn có thể tải về
tham khảo
10



×