1. Trang chủ
  2. » Nghệ sĩ và thiết kế

Tải Đề thi KSCL đội tuyển HSG Tin học 12 năm 2018 - 2019 trường Yên Lạc 2 - Vĩnh Phúc - Đề thi HSG Tin học 12 có đáp án

9 47 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Khi một khách hàng muốn rút M đồng, máy ATM sẽ nhả ra m tờ tiền mà có tổng là W đồng. Cho biết cách thanh toán cần ít số lượng tờ tiền nhất cho số tiền cần thanh toán là W[r]

(1)

SỞ GD&ĐT VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 2

KÌ THI KSCL ĐỘI TUYỂN HỌC SINH GIỎI KHỐI 12 ĐỀ THI MÔN: TIN HỌC 12

NĂM HỌC 2018 - 2019

Thời gian làm 180 phút, không kể thời gian giao đề. Đề thi gồm có 03 02 Trang

Tổng quan đề thi

Tên bài File chương trình File Input File Output Thời gian Điểm

Bài 1 DEM.* DEM.inp DEM.out 1s / test 6

Bài 2 TACH.* TACH.inp TACH.out 1s / test 6

Bài 3 ATM.* ATM.inp ATM.out 1s / test 8

Chú ý: Thí sinh thay * tên chương trình PAS CPP tùy theo ngơn ngữ lập trình mà thí sinh sử dụng PASCAL C++.

Bài 1: Đếm số bên phải

Cho số nguyên n Hãy đếm xem kết số n! (n giai thừa) có chữ số liên tiếp tính từ hàng đơn vị (hay số liên tiếp bên phải)

Dữ liệu vào

- Một dòng chứa số nguyên n (1 ≤ n ≤ 1.000) Dữ liệu xuất:

- Một dòng ghi số lượng chữ số liên tiếp tính từ hàng đơn vị n! Ví dụ

Input Output

8

Giải thích 8! = 5040

Bài 2: Tách chuỗi đối xứng

Chuỗi đối xứng (palindrome) chuỗi mà ta đọc từ trái sang phải hay từ phải sang trái giống Ví dụ chuỗi 'abcba' chuỗi đối xứng Một ký tự gọi chuỗi đối xứng

Một chuỗi S ln ghép từ chuỗi đối xứng Ví dụ chuỗi 'bobseesanna' có số cách ghép sau:

1) 'b' + 'o' + 'b' + 'sees' + 'a' + 'n' + 'n' + 'a' 2) 'bob' + 'sees' + 'anna'

3) 'bob' + 's' + 'ee' + 's' + 'anna'

Tổng quát S = P1 + P2 + + Pk với P1, P2, , Pk chuỗi đối xứng Bạn tìm cách biểu diễn S cho k bé Trong ví dụ trên, k = (cách ghép số 2)

Dữ liệu vào:

- Dòng thứ số nguyên n (1 ≤ n ≤ 2.000) biểu thị chiều dài chuỗi S - Dòng thứ hai chuỗi S gồm n ký tự chữ la tinh thường từ a đến z Dữ liệu ra:

(2)

- Trong k dòng tiếp theo, dòng thứ i chuỗi đối xứng Pi Nếu có nhiều cách biểu diễn, cần in cách

Ví dụ

Input output

11

bobseesanna

3 bob sees anna

Bài 3: Máy rút tiền ATM

Vinh làm việc cho công ty sản xuất máy ATM Chức máy ATM rút tiền mặt Khi khách hàng muốn rút M đồng, máy ATM nhả m tờ tiền mà có tổng W đồng Trong máy ATM hệ tiếp theo, Vinh xây dựng thuật toán để tìm W (số lượng tờ tiền)

Giả sử máy ATM có N loại tiền: 1, 2, 3, , n; loại có mệnh giá tương ứng v[1] < v[2] < v[3] < < v[n] Cho biết cách toán cần số lượng tờ tiền cho số tiền cần toán W Bạn giúp Vinh viết chương trình thực yêu cầu Biết số tiền ATM lớn số tiền cần rút

Dữ liệu vào: Gồm dòng

Dòng 1: Chứa số nguyên dương N N số nguyên loại tiền đơn vị tính đồng v[1]… v[N]

Dòng 2: Chứa M số tiền khách hàng muốn rút tính đồng Dữ liệu xuất: Gồm nhiều dòng

Dòng 1: Ghi số W số lượng tờ tiền

Dịng trở đi: Gồm số W1 W2 W1 số tờ tiền tương ứng mệnh giá W2 Nếu cách rút tiền ghi file dịng chữ “nhap lai so tien”

Ví dụ

Input Output

4

10 20 50 100 450

5 100 50

-Hết -Thí sinh khơng sử dụng tài liệu để làm bài

Cán coi thi khơng giải thích them

(3)

SỞ GD&ĐT VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 2

ĐÁP ÁN KSCL ĐỘI TUYỂN HỌC SINH GIỎI KHỐI 12 ĐỀ THI MÔN: TIN HỌC 12

NĂM HỌC 2018 - 2019

Thời gian làm 180 phút, khơng kể thời gian giao đề. Đề thi gồm có 03 02 Trang

Bài 1: Đếm số bên phải Chương trình mẫu

var a,d,i,e:longint; f1,f2 :text; begin

assign(f1,’dem.inp’); reset(f1); assign(f2,’dem.out’);rewrite(f2); readln(f1,a);

d:= 0;

for i:=1 to a begin

e:=i;

while e mod = begin

inc(d); e := e div 5; end;

end;

writeln(f2,d); close(f1); close(f2); end

Đáp án:

Bài 2: Tách chuỗi đối xứng var i,j,n,m,t:longint;

a:array[0 100000] of char;

f:array[0 10000,0 10000] of longint; k,d,kt:array[-10000 10000] of longint; //f1, f2:text;

procedure motep; begin

assign(f1,'TACH.inp'); reset(f1); readln(f1,n);

for i:=1 to n read(f1,a[i]); assign(f2,'TACH.out'); rewrite(f2); end;

procedure xuli; begin

for i:=n downto begin

f[i,i]:=1; if i<>n then

if a[i]=a[i+1] then f[i,i+1]:=1; for j:=i+2 to n

if (a[i]=a[j]) and (f[i+1,j-1]=1) then f[i,j]:=1; end;

(4)

d[0]:=0; for i:=1 to n for j:=1 to n begin

if f[i,j]=1 then

if d[j]>=d[i-1]+1 then begin

d[j]:=d[i-1]+1; kt[j]:=i; end;

end; writeln(d[n]); t:=n;

while t>0 begin

k[kt[t]-1]:=1; t:=kt[t]-1; end;

for i:=1 to n begin

write(a[i]);

if k[i]=1 then writeln; end;

close(f1); close(f2); end;

begin motep; xuli; end

Bài 3: Rút tiền ATM

*Đặt lại tốn: Có N loại tiền: 1, 2, 3, , n; loại có mệnh giá tương ứng v[1] < v[2] < v[3] < < v[n] Cho biết cách tốn cần số lượng tờ tiền cho số tiền cần toán M

Cách giải

Gọi F[i, j] số lượng tờ tiền cần trả (cách trả cần tờ tiền nhất) có sử dụng i loại tờ tiền (1, 2, 3, , i) cho số tiền j

Giá trị cuối cùng: F[N, M] kết cách toán; dùng N loại tờ tiền (1, 2, 3, , N) cho số tiền M

*Công thức truy hồi: với việc chọn tối ưu số loại tiền 1, 2, 3, , i để toán số tiền j, F[i, j] có khả năng:

1) F[i, j] = F[i-1, j]; Không dùng loại tiền i để toán số tiền j.

2) F[i, j] = + F[i, j-v[i]]; Có dùng loại tiền i để toán số tiền j (đk: j >= v[i]).

F[i, j] cách trả cần tờ tiền nhất, giá trị thu

*Cơ sở quy hoạch động:

(5)

F[i, 0] = 0; (1<=i<=N) khơng có cách trả cho số tiền = {Quy Hoach Dong, Rut tien}

Program OptimizeCurrency;

Const NMax = 500; MMax = 65535; Var currency : Array[1 NMax] of Word; value : Array[1 NMax] of Word; F : Array[0 NMax, MMax] of Word; N, M : Word;

Procedure Init; Var i : Word; Begin

assign(f1,'ATM.inp'); reset(f1); assign(f2,'ATM.out'); rewrite(f2); readln(f1,n);

For i := to N Begin

Read(f1,currency[i]); value[i] := currency[i]; End;

Readln(f1); Readln(f1,M); For i := to M F[0, i] := M+1; For i := to N F[i, 0] := 0; End;

Procedure Optimize; Var i,j : Word; Begin

For i := to N For j := to M Begin

F[i, j] := F[i-1, j];

If (j >= value[i]) And (F[i, j] >= + F[i, j - value[i]]) Then F[i, j] := + F[i, j - value[i]];

End; End;

Procedure Result; Var i, j, c: Word; Begin

If F[N, M] = M+1 Then

Writeln(f2,'Khong the toan!') Else

Begin

Writeln(f2,'So luong to tien can tra cho so tien ', M, ' la: ', F[N, M]); Writeln('Cu the, cac loai to tien duoc toan la: ');

(6)

If F[i, j] < F[i-1, j] Then Begin

{Co dung loai tien i}

Writeln('To tien thu ', c , ' - loai: ', currency[i]); j := j - value[i];

c := c + 1; End

Else Begin

{Khong dung loai tien i} i := i - 1;

(7)

Hướng dẫn chấm Bài 1

Test Input Output Điểm

1 0.5

2 0.5

3 20 0.5

4 25 0.5

5 49 10 0.5

6 124 28 0.5

7 625 156 0.75

8 874 215 0.75

9 875 218 0.75

10 999 246 0.75

Bài 2

Test Input Output Điểm

1

11

bobseesanna 3bob

sees anna 0.5 noon noon 0.5 ab a b 0.5 google goog l e 0.5

abcbxbcby 3a

(8)

bcdefghijkkjihgfedcbbcdefghijkkji hgfedcbbcdefghijkkjihgfedcb

9

81

abcdefghijkkjihgfedcbbcdefghijkkji hgfedcbbcdefghijkkjihgfedcbbcdefg hijkkjihgfedcb

2 a

bcdefghijkkjihgfedcbbcdefghijkkji hgfedcbbcdefghijkkjihgfedcbbcdef ghijkkjihgfedcb

0.75

10 100

bbcdabdcaacdaabdadaaacbbdcababa cacbbddcabadbaabdbaddbaddacccaa dbaaaadbacacadbadcccdbddbadccac dbabbbd

47 bb c d a b dcaacd aa b dad aaa c bb d c ababa cac bb dd c aba dbaabd b a dd b adda ccc aa d b aaaa d b acaca d b a dcccd bddb a d c cac d

(9)

bab bb d

11

640

bcdefghijklmnopqrstuutsrqponmlkji hgfedcbbcdefghijklmnopqrStuutsrqp onmlkjihgfedcbbcdefghijklmnopqrst uutsrqponmlkjihgfedcbbcdeFghijkl mnopqrstuutsrqponmlkjihgfedcbbcd efghijklmnopqrstuutsrqponmlkjIhgf edcbbcdefghijklmnopqrstuutsrqpon mlkjihgfedcbbcdefghijklmnopqrstuu tsrqpOnmlkjihgfedcbbcdefghijklmn opqrstuutsrqponmlkjihgfedcbbcdefg hijklmnopqrstuutsrqponmlkjihgfedc bbcdefghijklmnopqrstuutsrqponmlkj i

1

bcdefghIjklmnopqrstuutsrqponmlk jihgfedcbbcdEfghijklmnopqrstuuts rqponmlkjihgfedCbbcdefghijklmn opqrstuutsrqponmlkjihgfEdcbbcde fghijklmnopqrstuutsrqponmlkJihgf edcbbcdefghijklmnopqrstuutsrqpo

nmlkjihg 0.75

Bài 3:

Test Input Output Điểm

1

10 20 50 100 450

5 100 50

2.0

2

10 20 50 100 200 755

Nhap lai so tien

2.0

3

10 20 50 100 200 10000

500

500 200 2.0

4

10 20 50 100 200 1240

62 60 200 20

2.0

Ngày đăng: 28/12/2020, 11:44

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w