Chọn vùng đất Bài toán

Một phần của tài liệu Tổng hợp các đề Olympic tin học quốc tế từ năm 1989 đến 2006 (Trang 107 - 112)

- .LCN với chương trình LOGO, PAS với chương trình PASCAL

3. Chọn vùng đất Bài toán

Bài tốn

Thành phố Dingilville cần tìm một mảnh đất để xây dựng sân baỵ Bản đồ thành phố là một lưới hình chữ nhật, mỗi ơ lới biểu diễn bởi một đơn vị diện tích vng, được xác định bởi các toạ độ (x,y), ở đây x - toạ độ ngang, y - toạ độ dọc. Chiều cao của mỗi diện tích vng được cho trên bản đồ.

u cầu của bài tốn là tìm ra được một vùng hình chữ nhật các ơ vng với diện tích lớn nhất (chứa nhiều ơ vng nhất) sao cho:

a) Hiệu số chiều cao của ô vuông cao nhưất và ô vuông thấp nhất trong vùng sẽ nhỏ hơn hoặc bằng một hằng số C.

b) Chiều rộng (chiều theo hướng tây - đông) của vùng luôn nhỏ hơn hoặc bằng 100. Trường hợp có nhiều vùng như vậy thì chỉ cần chỉ ra 1 trong chúng.

Hạn chế kỹ thuật

  1  U  700, 1  V  700 với U,V - chiều rộng (tây - đông) và cao (nam - bắc) của bản đồ.

  0  C  10

  - 30000  Hxy  30000 với Hxy - là số nguyên chỉ ra chiều cao của ô vuông tại địa chỉ (x, y), với 1  x  U, 1  x  V.

  Toạ độ góc Tây- Nam của bản đồ là (1,1), toạ độ góc Đơng - Bắc của bản đồ là U, V.

Input

Input là tệp văn bản land.inp

  Dòng đầu tiên ghi các số U, V và C

  V dòng tiếp theo, mỗi dòng ghi các số Hxy với x=1,2 ...U

Output

Output file tên là land.out chứa một dịng có 4 số ngun Xmin, Ymin, Xmax, Ymax với (Xmin, Ymin) là toạ độ góc trái dưới, (Xmax, Ymax) là toạ độ góc phải trên của vùng tìm được.

Trắc nghiệm

The 12th International Olympiad in Informatics Held in Beijing & China September 25-27, 2000. 1. Palindrome Bài toán

Palindrome là một chuỗi đối xứng nghĩa là một chuỗi đọc giống nhau nếu ta bắt đầu từ trái sang phải hay từ phải sang tráị Hãy viết chương trình từ một chuỗi cho trước xác định số ký tự ít nhất được chèn vào chuỗi để được một palindromẹ

Ví dụ, chèn 2 ký tự vào chuỗi "Ab3bd" có thể biến nó thành một palindrome ("dAb3bAd" hoặc "Adb3bdA") nhưng chèn dưới 2 ký tự thì khơng thể biến chuỗi trên thành một Palindromẹ

Input

Tệp input có tên là PALIN.IN. Dịng đầu tiên chứa 1 số nguyên chỉ độ dài của chuỗi N với 3<=N<=5000. Dòng thứ hai chứa 1 chuỗi ký tự có độ dài N. Chuỗi chỉ gồm các ký tự viết hoa từ „A‟ đến „Z‟, ký tự thường từ „a‟ đến „z‟ và các chữ số từ „0‟ đến „9‟. Các ký tự thường và ký tự hoa được hiểu khác nhaụ

Output

Tệp output có tên PALIN.OUT. Dịng đầu tiên chứa 1 số nguyên chỉ số ký tự ít nhất cần chèn bổ xung. Ví dụ Input và Output 2. Đỗ xe

Bài tốn

Một bãi đổ xe có các vị trí đỗ xếp thành hàng dàị Một đầu hàng gọi là đầu trái và đầu còn lại là đầu phảị Hàng đỗ chứa đầy xe hơị Mỗi chiếc xe có một kiểu và có thể có nhiều chiếc xe cùng kiểụ Kiểu xe được phân biệt bằng các giá trị nguyên. Một nhóm cơng nhân quyết định thứ tự sắp xếp xe trong hàng theo thứ tự kiểu xe tăng dần từ trái sang phải bằng cách saụ Cách này gọi là vịng trịn: nhóm cơng nhân, mỗi người lái một chiếc xe cùng lúc rời khỏi chỗ đỗ và đi đến đỗ vào vị trí mà một chiếc xe cùng vịng trịn vừa được lái rạ Có thể có một số cơng nhân không di chuyển xe theo vòng tròn. Để thuận lợi hơn, ta chỉ xét một số ít vịng trịn.

Giả sử N là số xe hơi và W là số cơng nhân. Hãy viết chương trình từ các kiểu xe cho

trước và số công nhân, tìm cách sắp xếp xe hơi sao cho số vòng tròn cần thiết tối đa

là . Số vịng trịn khơng vượt q .

Xét ví dụ dướị Có 10 xe hơi đã đỗ thuộc các kiểu xe 1, 2, 3 và 4 với 4 công nhân. Thứ tự đỗ xe ban đầu tính từ trái sang phải tính theo kiểu là

2 3 3 4 4 2 1 1 3 1.

Số vòng tròn tối thiểu là 3 và số vịng trịn có thể thực hiện để thứ tự đỗ xe sau đó là: 2 1 1 4 4 2 3 3 3 1 – sau vòng 1, 2 1 1 2 4 3 3 3 4 1 – sau vòng 2 và 1 1 1 2 2 3 3 3 4 4 – sau vòng 3. Input

Tệp input có tên là CAR.IN. Dịng đầu tiên chứa ba số nguyên. Số nguyên đầu tiên là số xe hơi N với 2<=N<=20000. Số thứ hai là số kiểu xe M với 2<=M<=50. Kiểu xe hơi được biểu diễn bằng các số nguyên từ 1 đến M. Mỗi kiểu có ít nhất một chiếc xe hơị Số nguyên thứ ba là số công nhân W với 2<=W<=M. Dòng thứ hai chứa N số nguyên, trong đó số nguyên thứ i là kiểu của xe hơi thứ i trong hàng tính từ trái sang phảị

Output

Tệp output có tên là CAR.OUT. Dòng đầu tiên chứa một số nguyên R chỉ số vòng tròn cần thiết trong giải pháp. R dòng tiếp theo mơ tả các vịng trịn theo thứ tự từ 1 đến R.

Trên mỗi dòng, số nguyên đầu tiên là số xe hơi C di chuyển theo vịng trịn đó. Sau đó là 2C số nguyên chỉ vị trí các xe hơị Vị trí các xe được xác định bằng từ 1 đến N bắt đầu từ đầu trái hàng. Hai số đầu tiên mô tả cách di chuyển của một chiếc xe hơi: số nguyên đầu tiên là vị trí tính từ đầu trái trước khi đi vịng trịn và số thứ hai là vị trí xe hơi sau khi đi vịng trịn. Hai số ngun tiếp theo mơ tả cách di chuyển của chiếc xe thứ hai, ... Có thể có nhiều giải pháp khác nhau cho R dịng đó, chương tình chỉ cần báo cáo một giải pháp.

Ví dụ Input và Output 3. Median Strength Bài toán

Một thí nghiệm khơng gian mới liên quan đến N vật thể được đánh số từ 1 đến N. Biết

rằng là N là số lẻ. Mỗi vật thể có độ bền khác nhau được biểu diễn bằng một số tự nhiên. Độ bền được ký hiệu là Y với 1<=Y<=N. Độ bền trung bình của vật thể X được tính bằng bình qn độ bền của tất cả các đồ vật có độ bền lớn hơn và nhỏ hơn X. Hãy viết chương trình xác định vật thể với độ bền trung bình.

Thư viện

Cho trước một thư viện có tên device với ba thủ tục sau:

  GetN không đối số được gọi một lần lúc đầu; thủ tục sẽ trả lại giá trị của N.

  Med3 được gọi cùng ba vật thể khác nhau như các đối số; thủ tục trả lại nhãn cho

vật thể với độ bền trung bình.

  Answer được gọi một lần khi kết thúc với nhãn vật thể như đối số; thủ tục báo

cáo nhãn của vật thể X với độ bền trung bình và kết thúc quá trình xử lý của chương trình.

Thư viện device tạo ra hai tệp văn bản: MEDIAN.OUT và MEDIAN.LOG. Dòng đầu

tiên của MEDIAN.OUT chứa 1 số nguyên chỉ nhãn của vật thể qua thư viện khi gọi thủ

tục Answer. Dòng thứ hai chứa 1 số nguyên chỉ số lần chương trình của bạn gọi thủ tục

Med3. Đối thoại giữa chương trình của bạn và thư viện đượcc ghi lại trong tệp MEDIAN.LOG.

Hướng dẫn lập trình với Pascal: kèm thêm câu lệnh nhập vào

uses device;

vào mã nguồn.

Hướng dẫn lập trình bằng C/C++: dùng lệnh

#include ″devicẹh″

trong mã nguồn, tạo một dự án MEDIAN.PRJ và bổ xung các tệp MEDIAN.C (MEDIAN.CPP) và DEVICẸOBJ vào dự án nàỵ

Thử nghiệm

Bạn có thể thử nghiệm với thư viện bằng cách tạo ra một tệp văn bản DEVICẸIN. Tệp này phải chứa hai dòng. Dòng đầu tiên chứa 1 số nguyên chỉ số vật thể N. Dòng thứ hai chứa các số nguyên từ 1 đến N theo thứ tự số nguyeê thứ i là độ bền của vật thể có nhãn

i.

Ví dụ

Tệp DEVICẸIN ở trên mơ tả ví dụ với 5 vật thể với các độ bền sau:

Dưới đây là thứ tự đúng các thủ tục được thư viện gọi ra:

1. 1. GetN (Pascal) hoặc GetN() (C/C++) trả lại 5.

Một phần của tài liệu Tổng hợp các đề Olympic tin học quốc tế từ năm 1989 đến 2006 (Trang 107 - 112)