Post Office 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 113 - 116)

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

1. Post Office Bài toán

Bài tốn

Có một tuyến đường cao tốc thẳng với nhiều làng mạc ở hai bên. Đường cao tốc được biểu diễn bằng một trục ngun và vị trí mỗi ngơi làng là một tọa độ nguyên trên trục. Hai làng bất kỳ khơng ở cùng vị trí. Khoảng cách giữa hai vị trí là hiệu của hai tọa độ nguyên đó.

Bưu điện được xây dựng ở một số làng trong số đó. Ngơi làng và bưu diện ở làng dó có cùng vị trí. Để xây dựng các bưu điện, phải chọn các vị trí của chúng sao cho tổng khoảng cách giữa mỗi ngôi làng và bưu điện gần ngơi làng đó nhất là ngắn nhất.

Hãy viết chương trình từ vị trí một số ngơi làng và bưu điện cho trước tính tổng khoảng cách nhỏ nhất có thể giữa mỗi ngơi làng với bưu điện gần ngơi làng đó nhất, đồng thời xác dịnh vị trí xây dựng các bưu dđện.

Input

Tệp input có tên POST.IN. Dòng đầu tiên chứa 2 số nguyên: số thứ nhất chỉ số làng V

với 1<=V<=300 và số thứ hai chỉ số bưu điện P với 1<=P<=30, P<=V. Dòng thứ hai chứa

V số nguyên theo thứ tự tăng dần. V số ngun đó là vị trí các ngơi làng. Mỗi vị trí là X

với 1<=X<=10000.

Output

Tệp output có tên POST.OUT. Dịng đầu tiên chứa một số nguyên S là tổng các khoảng cách giữa mỗi ngôi làng với bưu điện gần ngôi làng đó nhất. Dịng thứ hai chứa P số

nguyên theo thứ tự tăng dần. Các số ngun đó chỉ vị trí các ngơi làng khác nhau sẽ được xây bưu điện. Có thể có nhiều giải pháp khác nhau, chương trình chỉ cần báo cáo một giải pháp. Ví dụ Input và Output 2. Walls Bài toán

Ở một đất nước, các bức tường thành được xây dựng sao cho mỗi bức tường sẽ nối hai thành phố. Các bức tường thành khơng cắt lẫn nhaụ Do đó, đất nước này được chia thành các vùng mà khi đi từ vùng này sang vùng khác thì phải đi qua một thành phố hoặc đi ngang qua tường thành. Với 2 thành phố bất kỳ A và B, có nhiều nhất một bức tường thành với một đầu ở thành phố A và một đầu ở thành phố B và hơn nữa, có thể đi từ A đến B bằng cách đi qua một thành phố hoặc đi dọc theo một bức tường thành.

Có một câu lạc bộ mà các thành viên của nó sống trong các thành phố. Trong mỗi thành phố có thể có ít nhất một hoặc khơng có thành viên nào sống. Các thành viên muốn gặp nhau ở một trong các vùng (bên ngoài các thành phố). Các thành viên đi bằng xe đạp. Họ không muốn vào các thành phố vì tình hình giao thơng và họ muốn đi qua số bức tường thành ít nhất. Để đến chỗ gặp nhau, mỗi thành viên cần phải đi qua một số bức tường thành. Họ muốn tìm một vùng phù hợp nhất với tổng số lần đi qua tường thành là nhỏ nhất.

Các thành phố được đánh số từ 1 đến N trong đó N là số thành phố. Trong hình 1, các nút được đặt tên chỉ các thành phố và các đường nối các nút là các bức tường thành. Giả sử có ba thành viên sống trong các thành phố 3, 6 và 9. Vùng phù hợp nhất để hội họp và các lộ trình tương ứng cho các thành viên được minh họa trong hình 2. Tổng số lần đi qua tường thành là 2: thành viên từ thành phố số 9 phải đi qua tường thành giữa thành phố 2 và 4, và thành viên từ thành phố 6 phải đi qua tường thành giữa thành phố 4 và 7.

Hãy viết chương trình từ các thành phố, các vùng và thành phố quê hương của các thành viên câu lạc bộ, hãy xác định vùng phù hợp nhất cho hội họp với tổng số lần đi qua tường thành ít nhất.

Input

Tệp input có tên WALLS.IN. Dịng đầu tiên chứa 1 số nguyên chỉ số vùng M với

2<=M<=200. Dòng thứ hai chứa 1 số nguyên chỉ số thành phố N với 3<=N<=250. Dòng

thứ ba chứa 1 số nguyên chỉ số thành viên câu lạc bộ L với 1<=L<=30, L<=N. Dòng thứ tư chứa L số nguyên khác nhau theo thứ tự tăng dần chỉ tên các thành phố có thành viên câu lạc bộ sống.

Sau đó, tệp này chứa 2M dịng, mỗi cặp dòng tương ứng với 1 vùng: hai dòng đầu tiên trong số 2M dịng mơ tả vùng đầu tiên, hai dịng đầu tiên mơ tả vùng thứ hai, ... Trong mỗi cặp dòng, dòng thứ nhất chỉ số thành phố I xung quanh vùng đó. Dịng thứ hai chứa I số nguyên chỉ tên của I thành phố theo thứ tự đi qua khi đi theo chiều kim đồng hồ dọc theo biên giới vùng với ngoại lệ saụ Vùng cuối cùng là “vùng ngoài” bao quanh tất cảc các thành phố và các vùng khác, và thứ tự các thành phố theo hướng đi ngược chiều kim đồng hồ. Thứ tự các vùng được gán theo số nguyên: vùng đầu tiên là 1, vùng thứ hai là 2, ... Chú ý, input chứa tất cả các vùng được tạo thành từ các thành phố và tường thành gồm cả “vùng ngoài”.

Output

Tệp output có tên là WALLS.OUT. Dịng đầu tiên chứa 1 số nguyên chỉ số lần vượt qua ít nhất. Dịng thứ hai chứa 1 số nguyên chỉ tên vùng phù hợp nhất cho hội họp. Có nhiều giải pháp, chương tình chỉ cần báo cáo 1 giải pháp.

Ví dụ

Input và Output

Tệp input và output tương ứng với ví dụ trê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 113 - 116)