Đề thi khảo sát chất lượng đội tuyển học sinh giỏi môn Tin học lớp 12 năm học 2018-2019 – Trường THPT Yên Lạc 2 nhằm giúp học sinh tự rèn luyện, nâng cao kiến thức, chuẩn bị tốt cho kỳ thi học sinh giỏi sắp đến.
SỞ GD&ĐT VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 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 File chương trình File Input File Output Thời gian Điểm Bài DEM.* DEM.inp DEM.out 1s / test Bài TACH.* TACH.inp TACH.out 1s / test Bài ATM.* ATM.inp ATM.out 1s / test 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 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: - Dòng thứ số nguyên k VnDoc - Tải tài liệu, văn pháp luật, biểu mẫu miễn phí - 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 11 bobseesanna output 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 tố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 khơng có cách rút tiền ghi file dịng chữ “nhap lai so tien” Ví dụ Input Output 10 20 50 100 450 100 50 Hết -Thí sinh khơng sử dụng tài liệu để làm Cán coi thi khơng giải thích them Họ tên thí sinh:………………………………………Số báo danh:…………… VnDoc - Tải tài liệu, văn pháp luật, biểu mẫu miễn phí SỞ GD&ĐT VĨNH PHÚC TRƯỜNG THPT YÊN LẠC ĐÁ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 in 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; VnDoc - Tải tài liệu, văn pháp luật, biểu mẫu miễn phí end; for i:=1 to n+1 d[i]:=n*2; 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 để tốn số tiền j 2) F[i, j] = + F[i, j-v[i]]; Có dùng loại tiền i để tố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 VnDoc - Tải tài liệu, văn pháp luật, biểu mẫu miễn phí *Cơ sở quy hoạch động: F[0, j] = vơ cùng; (1