Đề thi Olympic Tin học quốc tế IOI năm 2014

9 22 0
Đề thi Olympic Tin học quốc tế IOI năm 2014

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

Thông tin tài liệu

Để trò chơi được thú vị hơn cho Jian-Jia, hai bạn thỏa thuận với nhau rằng Jian-Jia có thể không sử dụng mạng lưới chuyến bay thực tế của Đài Loan và tạo ra mạng theo diễn biến của trò c[r]

(1)

International Olympiad in Informatics 2014 13-20th July 2014

Taipei, Taiwan

Day-1 tasks Language: en-VNMgame

Trị chơi

Jian-Jia cậu bé u thích trò chơi Khi yêu cầu trả lời câu hỏi, cậu thích chơi trị chơi thay trả lời trực tiếp câu hỏi Jian-Jia gặp Mei-Yu kể cho cô bạn mạng lưới chuyến bay Đài Loan Có thành phố Đài Loan (được đánh số từ 0, , ), số thành phố nối với chuyến bay Mỗi chuyến bay nối hai thành phố theo hai chiều

Mei-Yu hỏi Jian-Jia liệu di chuyển hai thành phố máy bay (hoặc trực tiếp gián tiếp) hay không Jian-Jia không muốn tiết lộ câu trả lời mà thay điều đề nghị chơi trị chơi Mei-Yu hỏi cậu câu hỏi có dạng: "Giữa hai thành phố có chuyến bay trực tiếp hay không?" Jian-Jia trả lời câu hỏi Mei-Yu đặt câu hỏi cho cặp thành phố lần, đưa tổng cộng câu hỏi Mei-Yu giành phần thắng sau nhận câu trả lời cho câu hỏi , khẳng định mạng có liên thơng hay khơng, nghĩa di chuyển hai thành phố chuyến bay (hoặc trực tiếp gián tiếp) Ngược lại, cần hỏi tất câu hỏi người giành phần thắng Jian-Jia

Để trò chơi thú vị cho Jian-Jia, hai bạn thỏa thuận với Jian-Jia khơng sử dụng mạng lưới chuyến bay thực tế Đài Loan tạo mạng theo diễn biến trò chơi, lựa chọn câu trả lời dựa câu hỏi trước Mei-Yu Nhiệm vụ bạn giúp Jian-Jia giành phần thắng trò chơi cách đưa trả lời cho câu hỏi

Ví dụ

Chúng ta giải thích quy tắc trị chơi qua ba ví dụ Mỗi ví dụ có thành phố lượt hỏi trả lời

Trong ví dụ thứ (như bảng đây), Jian-Jia thua sau lượt thứ 4, Mei-Yu biết chắn di chuyển hai thành phố chuyến bay, không cần đến câu trả lời cho câu hỏi thứ thứ

Lượt Câu hỏi Trả lời

1 0, yes

2 3, yes

3 1, no

4 0, yes

- -

-5 3, no

6 2, no

(2)

chuyến bay sau lượt thứ 3, không cần đến câu trả lời cho câu hỏi thứ 4, Jian-Jia, Jian-Jia lại thua

Lượt Câu hỏi Trả lời

1 0, no

2 2, no

3 0, no

- -

-4 1, yes

5 1, yes

6 2, yes

Trong ví dụ cuối cùng, Mei-Yu khơng thể xác định liệu có cách di chuyển hai thành phố chuyến bay trước tất sáu câu hỏi trả lời, Jian-Jia giành phần thắng Cụ thể, Jian-Jia trả lời yes cho câu hỏi cuối (trong bảng đây), di chuyển hai thành phố Tuy nhiên, Jian-Jia trả lời no cho câu hỏi cuối điều khơng thể

Lượt Câu hỏi Trả lời

1 0, no

2 1, yes

3 0, no

4 3, yes

5 1, no

6 2, yes

Nhiệm vụ

Bạn viết chương trình giúp Jian-Jia giành phần thắng trò chơi Chú ý Mei-Yu lẫn Jian-Jia, người chiến lược chơi người ngược lại Mei-Yu hỏi cặp thành phố theo thứ tự Jian-Jia phải trả lời lập tức, câu hỏi Bạn cần cài đặt hai sau

initialize(n) Hàm initialize gọi Tham số số lượng thành phố

hasEdge(u, v) sau hàm hasEdge gọi lần Các lần gọi thể cho câu hỏi Mei-Yu theo thứ tự mà cô ta thực Bạn phải trả lời có hay khơng có chuyến bay trực tiếp hai thành phố Cụ thể, giá trị trả phải có chuyến bay trực tiếp, trường hợp ngược lại

Subtasks

(3)

subtask points

1 15

2 27

3 58

Chi tiết cài đặt

Bạn phải nộp file đặt tên game.c, game.cpp game.pas File cài đặt chương trình mơ tả sử dụng đặc tả

C/C++ programs

void initialize(int n); int hasEdge(int u, int v);

Pascal programs

procedure initialize(n: longint);

function hasEdge(u, v: longint): longint;

Sample grader

Sample grader đọc liệu vào theo khn dạng sau: Dịng 1: n

(4)

International Olympiad in Informatics 2014 13-20th July 2014

Taipei, Taiwan

Day-1 tasks Language: en-VNMrail

Đường tàu

Đài Loan có hệ thống đường tàu lớn nối hai bờ đơng tây hịn đảo Hệ thống đường tàu có khối Các khối nằm liên tiếp cạnh đánh số thứ tự , đầu bờ phía tây Mỗi khối gồm hai tuyến đường chiều: tuyến đường phía bắc hướng tây, tuyến đường phía nam hướng đơng; khối cịn có ga tàu nằm hai tuyến đường

Các khối chia thành ba loại Khối loại C chứa ga tàu mà bạn phải vào từ tuyến đường nằm phía bắc tuyến đường nằm phía nam, khối loại D chứa ga tàu mà bạn phải vào từ tuyến đường nằm phía nam tuyến đường nằm phía bắc, khối loại trống khơng chứa ga tàu Ví dụ, hình vẽ đây, khối 0, thuộc loại trống, khối 1, thuộc loại C, khối thuộc loại D Các khối nối với theo chiều ngang Các tuyến tương ứng hai khối liền kề thông với điểm nối, minh hoạ hình chữ nhật tơ mờ hình vẽ

Hệ thống đường tàu có ga tàu đánh số từ đến Có thể giả thiết ta từ bất kỳ ga tàu đến ga tàu khác cách theo tuyến đường Ví dụ ta từ ga tàu đến ga tàu cách xuất phát từ khối 2, qua khối sử dụng tuyến đường nằm phía nam, qua khối qua ga tàu 1, sau qua khối sử dụng tuyến đường nằm phía bắc, cuối đến ga tàu nằm khối

Vì có nhiều đường hai ga tàu, khoảng cách từ ga tàu đến ga tàu khác định nghĩa số lượng nhỏ nhất điểm nối mà đường phải qua Ví dụ, đường ngắn từ ga tàu đến ga tàu qua khối 2-3-4-5-4-3 qua điểm nối, có khoảng cách Hệ thống đường tàu quản lý hệ thống máy tính Khơng may, sau cố điện, máy tính bị thơng tin ga tàu nằm đâu khối chứa ga tàu thuộc loại Manh mối mà hệ thống máy tính cịn giữ số thứ tự khối chứa ga tàu 0, khối thuộc loại C May mắn hệ thống máy tính thực truy vấn tính khoảng cách từ ga tàu đến ga tàu khác Ví dụ, hệ thống máy tính thực truy vấn 'khoảng cách từ ga tàu đến ga tàu bao nhiêu?' trả giá trị

Nhiệm vụ

(5)

findLocation(n, first, location, stype) n: số lượng ga tàu

first: Số thứ tự khối chứa ga tàu

location: mảng có độ dài ; bạn cần gán giá trị số thứ tự khối chứa ga tàu cho

location[i]

stype: mảng có độ dài ; bạn cần gán loại khối ga tàu cho stype[i]: cho loại C cho loại D

Bạn gọi hàm getDistance để giúp bạn xác định vị trí loại khối ga tàu

getDistance(i, j) trả khoảng cách từ ga tàu i đến ga tàu j getDistance(i, i) trả getDistance(i, j) trả -1 i j nằm khoảng

Subtasks

Trong tất subtasks, số lượng khối không lớn 1,000,000 Trong vài subtasks số lượt gọi hàm getDistance bị hạn chế Hạn chế thay đổi theo subtasks Chương trình bạn đánh giá 'wrong answer' sử dụng giới hạn

subtask điểm số lần gọi

getDistance ghi chú

1 không hạn

chế

Tất ga tàu, trừ ga tàu 0, nằm khối thuộc loại D

2 22 không hạnchế

Tất ga tàu phía đơng ga tàu nằm khối thuộc loại D, tất ga tàu phía tây ga tàu nằm khối thuộc loại C

3 26 khơng có thêm hạn chế

4 44 khơng có thêm hạn chế

Chi tiết cài đặt

Bạn phải nộp file, đặt tên rail.c, rail.cpp rail.pas File cài đặt

findLocation mô tả sử dụng đặc tả sau Bạn cần phải nạp header file rail.h sử dụng C/C++

C/C++ program

void findLocation(int n, int first, int location[], int stype[]);

Pascal program

(6)

stype : array of longint);

Khuôn dạng getDistance mô tả sau

C/C++ program

int getDistance(int i, int j);

Pascal program

function getDistance(i, j: longint): longint;

Sample grader

Sample grader đọc liệu vào theo khn dạng sau: dịng 1: số thứ tự subtask

dòng 2: n

dòng , ( ): stype[i] (1 cho loại C cho loại D), location[i] Sample grader in Correct location[0] location[n-1] stype[0]

(7)

International Olympiad in Informatics 2014 13-20th July 2014

Taipei, Taiwan

Day-1 tasks Language: en-VNMwall

Bức tường

Jian-Jia xây dựng tường cách xếp viên gạch có kích thước Bức tường bao gồm cột gạch, đánh số từ đến từ trái qua phải Các cột có độ cao khác Độ cao cột số viên gạch

Jian-Jia xây dựng tường theo cách sau Thoạt tiên, viên gạch cột Sau đó, Jian-Jia thực giai đoạn thêm bớt viên gạch Quá trình xây dựng chấm dứt tất

giai đoạn hoàn thành Trong giai đoạn, Jian-Jia cho biết dãy cột gạch liên tiếp chiều cao , cần thực thủ tục sau đây:

Trong giai đoạn thêm, Jian-Jia thêm viên gạch vào cột dãy cột cho mà có viên gạch cho chúng chứa viên gạch Jian-Jia khơng làm với cột có nhiều viên gạch

Trong giai đoạn bớt, Jian-Jia loại bớt viên gạch từ cột dãy cột cho mà chứa nhiều viên gạch, cho chúng chứa viên gạch Jian-Jia khơng làm với cột có viên gạch

Nhiệm vụ bạn xác định hình dạng cuối tường Ví dụ

Giả sử có 10 cột gạch giai đoạn xây dựng tường Các dãy cột bảng sau kể hai cột đầu mút Sơ đồ tường sau giai đoạn mơ tả phía

giai đoạn kiểu dãy cột chiều cao

0 thêm từ cột đến bớt từ cột đến bớt từ cột đến thêm từ cột đến

4 thêm cột

5 bớt từ cột đến

(8)

Nhiệm vụ

Cho mơ tả giai đoạn, tính số lượng gạch cột sau thực xong tất giai đoạn Bạn cần cài đặt hàm buildWall

buildWall(n, k, op, left, right, height, finalHeight) n: số lượng cột tường

k: số lượng giai đoạn

op: mảng độ dài ; op[i] kiểu giai đoạn : giai đoạn thêm gia

đoạn bớt, với

left right: mảng độ dài ; cho biết dãy cột giai đoạn cột

left[i] kết thúc cột right[i] (kể hai cột hai đầu mút left[i]

right[i]), với Giả thiết ln có left[i] right[i]

height: mảng độ dài ; height[i] thông số chiều cao giai đoạn , với

(9)

Subtasks

Trong subtasks chiều cao giai đoạn số nguyên không âm nhỏ

subtask điểm chú thích

1 khơng có giới hạn bổ sung

2 24 tất giai đoạn thêm xuất

trước giai đoạn bớt

3 29 khơng có giới hạn bổ sung

4 39 khơng có giới hạn bổ sung

Chi tiết cài đặt

Bạn cần nộp file đặt tên wall.c, wall.cpp hay wall.pas File chứa cài đặt chương trình mơ tả sử dụng đặc tả sau Bạn cần nạp header file wall.h chương trình C/C++

C/C++ program

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]);

Pascal program

procedure buildWall(n, k : longint; op, left, right, height : array of longint; var finalHeight : array of longint);

Sample grader

Sample grader đọc liệu vào theo khn dạng sau: dịng 1: n, k

Ngày đăng: 09/04/2021, 22:06

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan