Tại giai đoạn ( ), người giới thiệu của giai đoạn này có thể bổ sung thành viên vào mạng theo một trong ba cách thức sau:.. IAmYourFriend gắn thành viên là bạn của duy nhất người g[r]
(1)International Olympiad in Informatics 2014 13-20th July 2014
Taipei, Taiwan
Day-2 tasks Language: en-VNMfriend
Bạn bè
Chúng ta xây dựng mạng xã hội gồm thành viên đánh số 0, , Có số cặp thành viên mạng bạn bè Nếu thành viên trở thành bạn thành viên , thành viên bạn thành viên
Các thành viên bổ sung vào mạng theo giai đoạn, đánh số từ đến Thành viên bổ sung giai đoạn Ở giai đoạn 0, thành viên bổ sung thành viên mạng Trong giai đoạn thuộc giai đoạn tiếp theo, thành viên bổ sung vào mạng người giới thiệu, thành viên mạng thời Tại giai đoạn ( ), người giới thiệu giai đoạn bổ sung thành viên vào mạng theo ba cách thức sau:
IAmYourFriend gắn thành viên bạn người giới thiệu.
MyFriendsAreYourFriends gắn thành viên bạn với người bạn người giới thiệu thời điểm Chú ý là, cách thức không gắn thành viên bạn người giới thiệu
WeAreYourFriends gắn thành viên bạn người giới thiệu bạn bất cứ người bạn người giới thiệu thời điểm
Sau xây dựng xong mạng muốn xác định mẫu thử để điều tra, nghĩa cần chọn nhóm thành viên mạng Do người bạn bè thường có mối quan tâm tương tự nhau, nên mẫu thử phải không chứa cặp hai thành viên bạn bè Mỗi thành viên có độ tự tin, đánh giá số nguyên dương, muốn tìm mẫu thử với tổng độ tự tin lớn
Ví dụ
giai đoạn người giới thiệu cách thức quan hệ bạn bè bổ sung
1 IAmYourFriend (1, 0)
2 MyFriendsAreYourFriends (2, 1)
3 WeAreYourFriends (3, 1), (3, 0), (3, 2) MyFriendsAreYourFriends (4, 1), (4, 3)
5 IAmYourFriend (5, 0)
(2)2 / bạn người giới thiệu) Kết giai đoạn mô tả bảng Mạng kết cuối hình vẽ sau đây, số vịng trịn số thành viên số bên cạnh vòng tròn độ tự tin Mẫu thử gồm hai thành viên có tổng độ tự tin 20 + 15 = 35, mẫu có tổng độ tự tin lớn
Nhiệm vụ
Cho biết mô tả giai đoạn độ tự tin thành viên, xác định mẫu thử với tổng độ tự tin lớn Bạn phải cài đặt hàm findSample
findSample(n, confidence, host, protocol) n: số lượng thành viên
confidence: mảng độ dài ; confidence[i] chứa độ tự tin thành viên host: mảng độ dài ; host[i] chứa số người giới thiệu giai đoạn
protocol: mảng độ dài ; protocol[i] chứa cách thức sử dụng giai đoạn ( ): IAmYourFriend, MyFriendsAreYourFriends,
WeAreYourFriends
Do khơng có người giới thiệu giai đoạn 0, host[0] protocol[0] khơng xác định chương trình bạn khơng truy nhập đến chúng
Hàm phải trả lại tổng độ tự tin lớn mẫu thử Subtasks
Một số subtasks sử dụng phận cách thức có thể, mơ tả bảng sau
subtask điểm độ tự tin các cách thức dùng
1 11 tất cách thức
2 dùng
MyFriendsAreYourFriends
3 dùng WeAreYourFriends
4 19 dùng IAmYourFriend
5 23 Tất độ tự tin DùngMyFriendsAreYourFriends IAmYourFriend
(3)Chi tiết cài đặt
Bạn cần nộp file đặt tên friend.c, friend.cpp hay friend.pas File cài đặt chương trình mơ tả sử dụng đặc tả sau Bạn cần nạp header file friend.h cài đặt C/C++
C/C++ program
int findSample(int n, int confidence[], int host[], int protocol[]);
Pascal programs
function findSample(n: longint, confidence: array of longint, host: array of longint; protocol: array of longint): longint;
Sample grader
Sample grader đọc liệu vào theo khuôn dạng: line 1: n
line 2: confidence[0], , confidence[n-1]
(4)1 / International Olympiad in Informatics 2014
13-20th July 2014 Taipei, Taiwan
Day-2 tasks Language: en-VNMgondola
Thuyền Gondola
Mao-Kong Gondola địa điểm du lịch tiếng Đài Bắc Hệ thống thuyền gondola gồm đường ray vòng tròn, bến đỗ nhất, thuyền gondola gắn số số liên tiếp từ đến chạy vòng quanh đường ray theo hướng cố định Sau thuyền gondola qua bến đỗ, qua bến đỗ gondola , gondola
Các thuyền gondola bị hỏng May mắn có số lượng không hạn chế thuyền gondola dự trữ đánh số , , v.v Khi thuyền gondola bị hỏng, thay (ở vị trí đường ray) thuyền dự trữ đầu tiên, cụ thể thuyền dự trữ có số nhỏ Ví dụ, có năm thuyền gondola gondola bị hỏng ta thay gondola
Bạn thích thú với việc đứng bến đỗ ngắm thuyền gondola qua bến đỗ Một dãy thuyền gondola dãy số số thuyền gondola qua bến đỗ Có thể xảy trường hợp nhiều thuyền gondola bị hỏng (và thay thế) trước bạn đến, gondola bị hỏng thời gian bạn đứng ngắm bến đỗ
Lưu ý cấu hình thuyền gondola đường ray cho nhiều dãy thuyền gondola, tuỳ thuộc vào việc bạn có mặt bến đỗ gondola qua bến đỗ Ví dụ khơng có gondola bị hỏng (2, 3, 4, 5, 1) (4, 5, 1, 2, 3) dãy thuyền gondola có thể, (4, 3, 2, 5, 1) khơng phải (vì gondola xuất sai thứ tự) Nếu gondola bị hỏng, ta quan sát thấy dãy thuyền gondola (4, 5, 6, 2, 3) Nếu gondola bị hỏng, ta thay gondola ta quan sát thấy dãy thuyền gondola (6, 2, 3, 7, 5) Nếu sau gondola bị hỏng, ta thay gondola ta quan sát thấy dãy thuyền gondola (3, 8, 5, 6, 2)
gondola bị hỏng gondola thay dãy thuyền gondola có thể
1 (4, 5, 6, 2, 3)
4 (6, 2, 3, 7, 5)
7 (3, 8, 5, 6, 2)
Một dãy thay dãy số gồm số thuyền gondola bị hỏng, theo thứ tự mà chúng bị hỏng Ở ví dụ trên, dãy thay (1, 4, 7) Một dãy thay tạo dãy thuyền gondola sau gondola bị hỏng theo dãy thay , dãy thuyền gondola quan sát thấy Kiểm tra dãy thuyền Gondola
(5)valid(n, inputSeq)
n: độ dài dãy đầu vào
inputSeq: mảng có độ dài ; inputSeq[i] phần tử thứ dãy đầu vào với
Hàm phải trả giá trị dãy đầu vào dãy thuyền gondola, trường hợp ngược lại
Subtasks 1, 2, 3
subtask điểm inputSeq
1 số khoảng từ to xuất lần
2 inputSeq[i]
3 10 inputSeq[i]
Ví dụ
subtask inputSeq giá trị trả về ghi chú
1 (1, 2, 3, 4, 5, 6, 7) 1 (3, 4, 5, 6, 1, 2)
1 (1, 5, 3, 4, 2, 7, 6) xuất trước (4, 3, 2, 1) xuất trước (1, 2, 3, 4, 5, 6, 5) hai gondola có số (2, 3, 4, 9, 6, 7, 1) dãy thay (5, 8)
3 (10, 4, 3, 11, 12) xuất trước Dãy thay thế
Trong ba subtask tiếp theo, bạn phải xây dựng dãy thay mà tạo dãy thuyền gondola cho trước Bất kỳ dãy thay thoả mãn điều kiện chấp nhận Bạn cần cài đặt hàm replacement
replacement(n, gondolaSeq, replacementSeq) n độ dài dãy thuyền gondola
gondolaSeq: dãy có độ dài ; gondolaSeq đảm bảo dãy thuyền gondola, gondolaSeq[i] phần tử dãy với
(6)3 /
replacementSeq: mảng đủ lớn để chứa dãy thay thế; bạn cần trả dãy thay cách gán giá trị phần tử dãy thay cho replacementSeq[i], với
Subtasks 4, 5, 6
subtask điểm gondolaSeq
4 gondolaSeq[i]
5 10 gondolaSeq[i]
6 20 gondolaSeq[i]
Ví dụ
subtask gondolaSeq giá trị trả về replacementSeq
4 (3, 1, 4) (2)
4 (5, 1, 2, 3, 4) ( ) (2, 3, 4, 9, 6, 7, 1) (5, 8) Đếm số dãy thay thế
Trong bốn subtask tiếp theo, bạn phải đếm số lượng dãy thay có thể, mà tạo dãy cho trước (có thể dãy thuyền gondola không phải), lấy phần dư chia cho 1,000,000,009 Bạn cần cài đặt hàm countReplacement
countReplacement(n, inputSeq) n: độ dài dãy đầu vào
inputSeq: mảng có độ dài ; inputSeq[i] phần tử dãy đầu vào với
Nếu dãy đầu vào dãy thuyền gondola, đếm số lượng dãy thay mà tạo dãy thuyền gondola (có thể có giá trị lớn), trả phần dư chia số này cho 1,000,000,009 Nếu dãy đầu vào dãy thuyền gondola, hàm phải trả giá trị Nếu dãy đầu vào dãy thuyền gondola khơng có gondola bị hỏng, hàm phải trả
Subtasks 7, 8, 9, 10
subtask điểm inputSeq
7 inputSeq[i]
8 15 inputSeq[i] , gondola ban đầu khơng bị hỏng
(7)10 10 inputSeq[i]
subtask điểm inputSeq
Ví dụ
subtask inputSeq giá trị trả về dãy thay thế
7 (1, 2, 7, 6) (3, 4, 5) (4, 5, 3) (2, 3, 4, 12, 6, 7, 1) (5, 8, 9, 10, 11)
9 (4, 7, 4, 7) inputSeq dãy thuyền gondola 10 (3, 4) (1, 2) (2, 1)
Chi tiết cài đặt
Bạn phải nộp file đặt tên gondola.c, gondola.cpp gondola.pas File phải cài đặt ba chương trình mơ tả (ngay bạn định giải vài subtask), sử dụng đặc tả Bạn cần nạp header file gondola.h cài đặt sử dụng C/C++
C/C++ programs
int valid(int n, int inputSeq[]);
int replacement(int n, int gondolaSeq[], int replacementSeq[]); int countReplacement(int n, int inputSeq[]);
Pascal programs
function valid(n: longint; inputSeq: array of longint): integer; function replacement(n: longint; gondolaSeq: array of longint; var replacementSeq: array of longint): longint;
function countReplacement(n: longint; inputSeq: array of longint): longint;
Sample grader
Sample grader đọc liệu đầu vào sử dụng định dạng sau:
dòng 1: T, số thứ tự subtask mà chương trình bạn định giải ( ) dòng 2: n, độ dài dãy đầu vào
(8)1 / International Olympiad in Informatics 2014
13-20th July 2014 Taipei, Taiwan
Day-2 tasks Language: en-VNMholiday
Kỳ nghỉ
Jian-Jia lên kế hoạch cho kỳ nghỉ Đài Loan Trong kỳ nghỉ này, Jian-Jia di chuyển từ thành phố đến thành phố khác thăm điểm du lịch thành phố
Có thành phố Đài Loan, tất nằm dọc theo đường cao tốc Các thành phố đánh số liên tiếp đến Thành phố với , liền kề với thành phố
Thành phố liền kề với thành phố thành phố thành phố liền kề với thành phố thành phố
Mỗi thành phố có số điểm du lịch Jian-Jia có ngày cho kỳ nghỉ lên kế hoạch để thăm nhiều điểm du lịch Jian-Jia chọn thành phố làm thành phố xuất phát cho kỳ nghỉ Mỗi ngày kỳ nghỉ, Jian-Jia di chuyển đến thành phố liền kề thăm tất điểm du lịch thành phố mà dừng chân, không thực hai điều Jian-Jia không bao thăm điểm du lịch thành phố hai lần Jian-Jia trong thành phố nhiều lần Hãy giúp Jian-Jia lên kế hoạch cho kỳ nghỉ để thăm nhiều điểm du lịch khác
Ví dụ
Giả sử Jian-Jia có ngày cho kỳ nghỉ, có thành phố (được liệt kê bảng đây) Jian-Jia xuất phát từ thành phố Trong ngày thứ nhất, Jian-Jia thăm quan 20 điểm du lịch thành phố Trong ngày thứ hai Jian-Jia di chuyển từ thành phố đến thành phố ngày thứ ba thăm 30 điểm du lịch thành phố Jian-Jia dành ba ngày để di chuyển từ thành phố đến thành phố thăm 10 điểm du lịch thành phố vào ngày thứ bảy Tổng số điểm du lịch mà Jian-Jia thăm 20 + 30 + 10 = 60, số lượng lớn điểm du lịch mà Jian-Jia thăm ngày xuất phát từ thành phố
thành phố số điểm du lịch
0 10
1
2 20
3 30
4
ngày hoạt động
(9)7 thăm điểm du lịch thành phố
ngày hoạt động
Nhiệm vụ
Bạn cần cài đặt hàm findMaxAttraction để tính số lượng nhiều điểm du lịch mà Jian-Jia thăm
findMaxAttraction(n, start, d, attraction) n: số lượng thành phố
start: thành phố xuất phát d: số lượng ngày
attraction: mảng có độ dài ; attraction[i] số lượng điểm du lịch thành phố
, với
Hàm phải trả số lượng nhiều điểm du lịch mà Jian-Jia thăm Subtasks
Trong tất subtasks có số điểm du lịch thành phố không âm
Các ràng buộc thêm:
subtask điểm số điểm du lịch lớn thành
phố thành phố xuấtphát
1 1,000,000,000 khơng có ràng buộc
nào
2 23 100 thành phố
3 17 1,000,000,000 khơng có ràng buộc
nào
4 53 1,000,000,000 khơng có ràng buộc
nào Chi tiết cài đặt
Bạn phải nộp file, đặt tên holiday.c, holiday.cpp holiday.pas File cài đặt chương trình mô tả sử dụng đặc tả sau Bạn cần phải nạp header file holiday.h sử dụng C/C++
Chú ý kết lớn kiểu liệu trả hàm findMaxAttraction số nguyên 64-bit
(10)3 /
long long int findMaxAttraction(int n, int start, int d, int attraction[]);
Pascal program
function findMaxAttraction(n, start, d : longint; attraction : array of longint): int64;
Sample grader
Sample grader đọc liệu vào theo khuôn dạng sau: line 1: n, start, d
line 2: attraction[0], , attraction[n-1]