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 56 4

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 19,81 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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]

Trang 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 bài 180 phút, không kể thời gian giao đề.

Đề thi gồm có 03 bài 02 Trang

Tổng quan đề thi

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

Chú ý: Thí sinh thay * trong tên chương trình là PAS hoặc CPP tùy theo ngôn ngữ lập trình

mà thí sinh sử dụng là PASCAL hoặc C++.

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

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

Dữ liệu vào

- Một dòng duy nhất chứa số nguyên n (1 ≤ n ≤ 1.000)

Dữ liệu xuất:

- Một dòng duy nhất ghi số lượng chữ số 0 liên tiếp tính từ hàng đơn vị của n!

Ví dụ

Giải thích 8! = 5040

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

Chuỗi đối xứng (palindrome) là chuỗi mà nếu ta đọc từ trái sang phải hay từ phải sang trái thì đều giống nhau Ví dụ chuỗi 'abcba' là chuỗi đối xứng Một ký tự duy nhất cũng được gọi là chuỗi đối xứng

Một chuỗi S bất kỳ luôn có thể ghép được từ các chuỗi đối xứng Ví dụ chuỗi 'bobseesanna'

có một số cách ghép như 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 là các chuỗi đối xứng Bạn hãy tìm cách biểu diễn S sao cho k là bé nhất Trong ví dụ trên, k = 3 (cách ghép số 2)

Dữ liệu vào:

- Dòng thứ nhất là số nguyên n (1 ≤ n ≤ 2.000) biểu thị chiều dài chuỗi S

- Dòng thứ hai là chuỗi S gồm n ký tự là các chữ cái la tinh thường từ a đến z

Dữ liệu ra:

- Dòng thứ nhất là số nguyên k

Trang 2

- Trong k dòng tiếp theo, tại dòng thứ i là chuỗi đối xứng Pi Nếu có nhiều cách biểu diễn, chỉ cần in ra một cách bất kỳ

Ví dụ

11 bobseesanna

3 bob sees anna

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

Vinh làm việc cho một công ty sản xuất máy ATM Chức năng cơ bản của một máy ATM là rút tiền mặt 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 Trong máy ATM thế hệ tiếp theo, Vinh đang xây dựng một thuật toán để tìm được W (số lượng các tờ tiền) là ít nhất

Giả sử máy ATM có N loại tiền: 1, 2, 3, , n; mỗi loại có 1 mệnh giá tương ứng là v[1] < v[2] < v[3] < < v[n] 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 Bạn hãy giúp Vinh viết chương trình thực hiện yêu cầu trên Biết rằng số tiền trong cây ATM lớn hơn số tiền cần rút

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

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

Dòng 2: Chứa M là số tiền khách hàng muốn rút tính bằng đồng

Dữ liệu xuất: Gồm nhiều dòng

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

Dòng 2 trở đi: Gồm 2 số W1 và W2 trong đó W1 là số tờ tiền tương ứng mệnh giá W2

Nếu không có cách rút tiền ghi ra file dòng chữ “nhap lai so tien”

Ví dụ

4

10 20 50 100 450

5

4 100

1 50

-Hết -Thí sinh không sử dụng tài liệu để làm bài Cán bộ coi thi không giải thích gì them

Họ và tên thí sinh:………Số báo danh:………

Trang 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 bài 180 phút, không kể thời gian giao đề.

Đề thi gồm có 03 bài 02 Trang

Bài 1: Đếm số 0 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 do

begin

e:=i;

while e mod 5 = 0 do

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 do read(f1,a[i]);

assign(f2,'TACH.out'); rewrite(f2);

end;

procedure xuli;

begin

for i:=n downto 1 do

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 do

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

end;

for i:=1 to n+1 do d[i]:=n*2;

Trang 4

d[0]:=0;

for i:=1 to n do

for j:=1 to n do

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 do

begin

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

t:=kt[t]-1;

end;

for i:=1 to n do

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 bài toán: Có N loại tiền: 1, 2, 3, , n; mỗi loại có 1 mệnh giá tương ứng là v[1] < v[2] <

v[3] < < v[n] 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à 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 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] là kết quả của cách thanh 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 để thanh toán số tiền j, F[i, j]

sẽ có 2 khả năng:

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

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

F[i, j] là cách trả cần ít tờ tiền nhất, cho nên sẽ là min trong 2 giá trị thu được ở trên

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

F[0, j] = vô cùng; (1<= j <= M) (quy định: nếu dùng các tờ tiền loại 0, có mệnh giá v[0] = 0 thì

sẽ cần vô cùng tờ tiền mới thanh toán được cho số tiền j)

Trang 5

F[i, 0] = 0; (1<=i<=N) không có cách trả cho số tiền = 0.

{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, 0 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 := 1 to N do

Begin

Read(f1,currency[i]);

value[i] := currency[i];

End;

Readln(f1);

Readln(f1,M);

For i := 1 to M do

F[0, i] := M+1;

For i := 1 to N do

F[i, 0] := 0;

End;

Procedure Optimize;

Var i,j : Word;

Begin

For i := 1 to N do

For j := 1 to M do

Begin

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

If (j >= value[i]) And (F[i, j] >= 1 + F[i, j - value[i]]) Then F[i, j] := 1 + 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 thanh 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 thanh toan la: ');

i := N; j := M; c := 1;

While j > 0 do

Begin

Trang 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;

End;

End;

End;

Readln;

End;

BEGIN

Init;

Optimize;

Result;

END

Trang 7

Hướng dẫn chấm

Bài 1

Bài 2

1

11

sees anna

0.5

3

2

ab

2 a b

0.5

4

6

google

3 goog l e

0.5

5

9

bcbxbcb y

0.5

6

20

aaabbbbccccddddeeeef

6 aaa bbbb cccc dddd eeee f

0.5

7

100

aaaaaaaaaaaaaaaaaaabbbbbbbbbbbb

bbbbbbbbccccccccccccccccccc

cddddddddddddddddddddeeeeeeeee

eeeeeeeeeeef

6 aaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb cccccccccccccccccccc dddddddddddddddddddd eeeeeeeeeeeeeeeeeeee f

0.5

bcdefghijkkjihgfedcxbcdefghijkkjih

gfedcbbcdefghijkkjihgfedcbbcdefgh

ijkkjihgfedcb

4 b cdefghijkkjihgfedc x

0.75

Trang 8

bcdefghijkkjihgfedcbbcdefghijkkji hgfedcbbcdefghijkkjihgfedcb

9

81

abcdefghijkkjihgfedcbbcdefghijkkji

hgfedcbbcdefghijkkjihgfedcbbcdefg

hijkkjihgfedcb

2 a bcdefghijkkjihgfedcbbcdefghijkkji hgfedcbbcdefghijkkjihgfedcbbcdef ghijkkjihgfedcb

0.75

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

0.75

Trang 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

Bài 3:

1

4

10 20 50 100

450

5

4 100

1 50

2.0

2

5

10 20 50 100 200

755

Nhap lai so tien

2.0

3

5

10 20 50 100 200

10000

500

4

5

10 20 50 100 200

1240

62

60 200

2 20

2.0

Xem thêm các bài tiếp theo tại:

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w