Së Gi¸o dôc-§µo t¹o
Qu¶ng b×nh
SBD :
§Ò chÝnh thøc
kú thi CHäN häc sinh giái líp 12
n¨m häc 2009-2010
m«n: tin häc - vßng Ii
Thời gian 180 phút, không kể thời gian giao đề
ĐỀ RA
Sử dụng ngôn ngữ lập trình Turbo Pascal để lập trình giải các bài toán sau:
Câu 1: (3,0 điểm) Tách từ trong xâu
TACHTU.PAS
Người ta định nghĩa: Từ là một nhóm ký tự liên tiếp, không chứa dấu cách.
Cho một xâu St có N từ. Xâu St được tạo thành từ M ký tự lấy từ tập
’A’..’Z’, ’a’..’z’ và dấu cách, (1 < N < 10; N < M < 255).
Yêu cầu: Tách từ cuối cùng của xâu St.
Dữ liệu vào: Cho trong file văn bản TACHTU.INP, có cấu trúc như sau:
- Dòng 1: Ghi xâu ký tự St.
Dữ liệu ra: Ghi ra file văn bản TACHTU.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi một xâu ký tự, là từ cuối cùng của xâu St.
Ví dụ:
TACHTU.INP
TACHTU.OUT
Le Tuan Phuc
Phuc
Câu 2: (3,5 điểm) Tìm giá trị lớn thứ hai trong dãy
MAX2.PAS
Cho dãy số gồm N phần tử có giá trị nguyên dương a1, a2, .., aN.
Yêu cầu: Hãy tìm giá trị lớn thứ hai trong dãy hoặc thông báo không tồn tại giá trị
lớn thứ hai.
Dữ liệu vào: Cho trong file văn bản MAX2.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 số (1 ≤N≤ 32000).
- Dòng 2: Ghi N số nguyên dương a1, a2, .., aN, là giá trị của các phần tử trong dãy,
các số được ghi cách nhau ít nhất một dấu cách, (0 < ai ≤ 32000; 1 ≤ i ≤ N).
Dữ liệu ra: Ghi ra file văn bản MAX2.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi giá trị lớn thứ hai tìm được. Nếu không tồn tại giá trị lớn thứ hai thì
ghi số -1.
Ví dụ:
MAX2.IN1
MAX2.OU1
8
5
2 5 2 4 3 8 5 2
MAX2.IN2
MAX2.OU2
3
-1
5 5 5
Giới hạn thời gian thực hiện chương trình không quá 0,5 giây đối với mọi
trường hợp của dữ liệu vào.
1/2
Câu 3: (3,5 điểm) Du lịch vòng quanh thế giới.
DULICH.PAS
Trên một tuyến đường du lịch từ địa điểm X đến địa điểm Y có N khách sạn
được đánh số theo thứ tự từ 1 đến N. Khách sạn thứ i cách địa điểm xuất phát X là
ai (km), (i = 1, 2, .. , N; a1 < a2 < .. < aN), khách sạn thứ N nằm tại địa điểm Y, là
địa điểm cuối cùng mà xe bắt buộc phải dừng.
Để đảm bảo sức khoẻ cho hành khách, theo tính toán của chuyên gia, sau khi
đã chạy được P (km) xe phải dừng lại cho hành khách nghỉ ở một khách sạn. Vì
thế, nếu xe dừng lại cho hành khách nghỉ ở một khách sạn sau khi đã đi được Q
(km) thì lái xe phải trả lại kinh phí cho hành khách là (Q-P)2.
Yêu cầu: Hãy xác định xem trên tuyến đường từ điểm xuất phát X đến khách sạn
thứ N xe cần dừng lại nghỉ ở những khách sạn nào để tổng kinh phí mà lái xe phải
trả lại cho hành khách là nhỏ nhất.
Dữ liệu vào: Cho trong file văn bản DULICH.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng khách sạn trên tuyến đường,
(0 < N ≤ 10000).
- Dòng 2: Ghi số nguyên dương P, là số km mà xe nên dừng lại cho hành khách
nghỉ để đảm bảo sức khỏe. (0 < P ≤ 500).
- Dòng 3: Ghi N số nguyên dương a1, a2,.., aN, là khoảng cách từ khách sạn thứ i
đến điểm xuất phát X. Các số được ghi cách nhau ít nhất một dấu cách.
(0 < ai ≤ 2000000; i = 1, 2,.., N).
Dữ liệu ra: Ghi ra file văn bản DULICH.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi số Z là tổng kinh phí mà lái xe phải trả lại cho hành khách. Biết
rằng: 0 < Z < 2 × 109.
- Dòng 2: Ghi số K là tổng số khách sạn mà lái xe cần dừng lại cho hành khách
nghỉ.
- Dòng 3: Ghi chỉ số của K khách sạn mà xe phải dừng lại cho hành khách nghỉ
trên cả tuyến đường, theo thứ tự tăng dần của chỉ số (kể cả khách sạn thứ N). Các
số được ghi cách nhau ít nhất một dấu cách.
Ví dụ:
DULICH.INP
DULICH.OUT
4
500
300
2
250 310 550 590
2
4
Giới hạn thời gian thực hiện chương trình không quá 0,5 giây đối với mọi
trường hợp của dữ liệu vào.
==HẾT==
2/2
... vòng quanh giới DULICH.PAS Trên tuyến đường du lịch từ địa điểm X đến địa điểm Y có N khách sạn đánh số theo thứ tự từ đến N Khách sạn thứ i cách địa điểm xuất phát X (km), (i = 1, 2, , N; a1