| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | IOI 2007 - Miners | 100 (p) | 1.5s | 16M |
| 2 | IOI 2007 - Pairs | 100 (p) | 4.0s | 150M |
| 3 | IOI 2007 - Trainings | 100 (p) | 0.3s | 64M |
Có hai mỏ than, mỗi mỏ có một nhóm thợ mỏ làm việc. Khai thác than là công việc nặng nhọc, vì vậy các thợ mỏ cần được cung cấp thức ăn để tiếp tục làm việc. Mỗi khi một chuyến hàng thực phẩm đến mỏ, các thợ mỏ sẽ khai thác được một lượng than. Có ba loại chuyến hàng: thịt, cá và bánh mì.
Các thợ mỏ thích chế độ ăn đa dạng và sẽ làm việc hiệu quả hơn nếu thực phẩm được cung cấp phong phú. Cụ thể, mỗi khi nhận được một chuyến hàng mới, họ xét chuyến hàng này cùng hai chuyến hàng trước đó mà mỏ của họ đã nhận được (hoặc ít hơn nếu chưa nhận đủ hai chuyến). Khi đó:
Ta biết trước loại thực phẩm của từng chuyến hàng và thứ tự các chuyến hàng sẽ được gửi đi. Bằng cách quyết định chuyến hàng nào được gửi đến mỏ nào, ta có thể ảnh hưởng đến lượng than được khai thác. Không được chia nhỏ một chuyến hàng: toàn bộ chuyến hàng phải được gửi đến một trong hai mỏ.
Hai mỏ không nhất thiết phải nhận cùng số chuyến hàng; thậm chí có thể gửi tất cả các chuyến hàng đến một mỏ.
Cho các loại chuyến hàng theo đúng thứ tự gửi đi, hãy xác định tổng lượng than lớn nhất mà cả hai mỏ có thể khai thác bằng cách lựa chọn mỏ nhận từng chuyến hàng.
M (thịt), F (cá) hoặc B (bánh mì).Ghi một số nguyên duy nhất: tổng lượng than lớn nhất có thể khai thác.
Lưu ý: Cách chia nhóm và tính điểm dưới đây là bản điều chỉnh để luyện tập trên hệ thống, không khẳng định tương đương cách chấm tại IOI gốc.
Mỗi nhóm được chấm độc lập: chỉ nhận điểm của nhóm khi vượt qua tất cả bộ kiểm thử trong nhóm; nếu có bộ kiểm thử không đạt thì nhóm nhận 0 điểm. Tổng điểm tối đa là 100.
Nhãn nhóm là phần số trong tên tệp dữ liệu gốc. Tất cả tệp cùng nhãn, kể cả các hậu tố chữ và pf, đều thuộc nhóm đó.
| Nhãn nhóm | Điểm | Tệp dữ liệu vào gốc |
|---|---|---|
| 1 | 8 | miners/miners.in.1 |
| 2 | 8 | miners/miners.in.2 |
| 3 | 8 | miners/miners.in.3 |
| 4 | 8 | miners/miners.in.4 |
| 5 | 8 | miners/miners.in.5 |
| 6 | 8 | miners/miners.in.6 |
| 7 | 8 | miners/miners.in.7 |
| 8 | 8 | miners/miners.in.8 |
| 9 | 9 | miners/miners.in.9 |
| 10 | 9 | miners/miners.in.10 |
| 11 | 9 | miners/miners.in.11 |
| 12 | 9 | miners/miners.in.12 |
Các ví dụ trong đề không tính điểm.
Ví dụ 1
6
MBMFFB
12
Nếu lần lượt gửi các chuyến hàng đến mỏ \(1\), mỏ \(1\), mỏ \(2\), mỏ \(2\), mỏ \(1\), mỏ \(2\), thì lượng than khai thác được sau từng chuyến lần lượt là \(1\), \(2\), \(1\), \(2\), \(3\) và \(3\), tổng cộng \(12\) đơn vị. Cũng có những cách phân phối khác đạt được lượng than lớn nhất này.
Ví dụ 2
16
MMBMBBBBMMMMMBMB
29
Mirko và Slavko đang chơi với những con thú đồ chơi. Trước tiên, họ chọn một trong ba bàn chơi trong hình dưới đây. Mỗi bàn gồm các ô (được vẽ bằng những vòng tròn trong hình), sắp xếp thành một lưới một chiều, hai chiều hoặc ba chiều.
Sau đó, Mirko đặt \(N\) con thú đồ chơi vào các ô.
Khoảng cách giữa hai ô là số bước ít nhất mà một con thú cần thực hiện để đi từ ô này đến ô kia. Trong một bước, con thú có thể đi sang một ô kề với ô hiện tại; các ô kề nhau được nối bằng những đoạn thẳng trong hình.
Hai con thú nghe thấy nhau nếu khoảng cách giữa hai ô của chúng không vượt quá \(D\). Nhiệm vụ của Slavko là tính số cặp con thú nghe thấy nhau.
Cho loại bàn chơi, vị trí của tất cả các con thú và số \(D\), hãy tính số cặp cần tìm.
Dòng thứ nhất chứa bốn số nguyên theo thứ tự:
Mỗi dòng trong \(N\) dòng tiếp theo chứa \(B\) số nguyên, cách nhau bởi dấu cách, là các tọa độ của một con thú. Mỗi tọa độ nằm trong đoạn từ \(1\) đến \(M\), kể cả hai đầu.
Có thể có nhiều con thú cùng nằm trong một ô.
Ghi một số nguyên duy nhất: số cặp con thú nghe thấy nhau.
Lưu ý: hãy dùng kiểu số nguyên \(64\) bit để tính toán và in kết quả (long long trong C/C++, int64 trong Pascal).
Lưu ý: Cách chia nhóm và tính điểm dưới đây là bản điều chỉnh để luyện tập trên hệ thống, không khẳng định tương đương cách chấm tại IOI gốc.
Mỗi nhóm được chấm độc lập: chỉ nhận điểm của nhóm khi vượt qua tất cả bộ kiểm thử trong nhóm; nếu có bộ kiểm thử không đạt thì nhóm nhận 0 điểm. Tổng điểm tối đa là 100.
Nhãn nhóm là phần số trong tên tệp dữ liệu gốc. Tất cả tệp cùng nhãn, kể cả các hậu tố chữ và pf, đều thuộc nhóm đó.
| Nhãn nhóm | Điểm | Tệp dữ liệu vào gốc |
|---|---|---|
| 1 | 5 | pairs/pairs.in.1a, pairs/pairs.in.1b |
| 2 | 5 | pairs/pairs.in.2a |
| 3 | 7 | pairs/pairs.in.3a, pairs/pairs.in.3b |
| 4 | 8 | pairs/pairs.in.4a, pairs/pairs.in.4b |
| 5 | 8 | pairs/pairs.in.5a, pairs/pairs.in.5b, pairs/pairs.in.5c |
| 6 | 10 | pairs/pairs.in.6a, pairs/pairs.in.6b |
| 7 | 8 | pairs/pairs.in.7a, pairs/pairs.in.7b |
| 8 | 8 | pairs/pairs.in.8a, pairs/pairs.in.8b, pairs/pairs.in.8c, pairs/pairs.in.8d |
| 9 | 8 | pairs/pairs.in.9a, pairs/pairs.in.9b, pairs/pairs.in.9c, pairs/pairs.in.9d |
| 10 | 10 | pairs/pairs.in.10a, pairs/pairs.in.10b |
| 11 | 7 | pairs/pairs.in.11a, pairs/pairs.in.11b, pairs/pairs.in.11c |
| 12 | 8 | pairs/pairs.in.12a, pairs/pairs.in.12b, pairs/pairs.in.12c |
| 13 | 8 | pairs/pairs.in.13a, pairs/pairs.in.13b, pairs/pairs.in.13c |
Các ví dụ trong đề không tính điểm.
Ví dụ 1
1 6 5 100
25
50
50
10
20
23
4
Đánh số các con thú từ \(1\) đến \(6\) theo thứ tự xuất hiện trong dữ liệu vào. Bốn cặp nghe thấy nhau là:
Ví dụ 2
2 5 4 10
5 2
7 2
8 4
6 5
4 4
8
Đánh số các con thú theo thứ tự xuất hiện trong dữ liệu vào. Tám cặp nghe thấy nhau là:
Ví dụ 3
3 8 10 20
10 10 10
10 10 20
10 20 10
10 20 20
20 10 10
20 10 20
20 20 10
20 20 20
12
Mirko và Slavko đang tích cực tập luyện cho cuộc đua marathon xe đạp đôi hằng năm tại Croatia. Họ cần chọn một lộ trình để tập luyện.
Đất nước của họ có \(N\) thành phố và \(M\) con đường. Mỗi con đường nối hai thành phố và có thể đi theo cả hai chiều. Đúng \(N-1\) con đường được trải nhựa; các con đường còn lại là đường mòn chưa trải nhựa. Mạng lưới đường được thiết kế sao cho giữa hai thành phố bất kỳ luôn có một đường đi chỉ gồm các đường đã trải nhựa. Nói cách khác, \(N\) thành phố cùng \(N-1\) đường trải nhựa tạo thành một cây.
Ngoài ra, mỗi thành phố là đầu mút của không quá \(10\) con đường, tính cả đường trải nhựa lẫn đường chưa trải nhựa.
Một lộ trình tập luyện bắt đầu tại một thành phố, đi qua một số con đường rồi quay về thành phố xuất phát. Mirko và Slavko thích đến những nơi mới, nên ngoài việc quay lại thành phố xuất phát để kết thúc lộ trình, họ không được đi qua một thành phố hai lần hoặc đi trên cùng một con đường hai lần. Có thể xuất phát ở bất kỳ thành phố nào và không bắt buộc phải đi qua tất cả các thành phố.
Người ngồi phía sau đạp nhẹ hơn vì được người phía trước che gió. Vì vậy, Mirko và Slavko đổi chỗ cho nhau tại mỗi thành phố. Để cả hai được tập luyện như nhau, họ phải chọn một lộ trình có số con đường là số chẵn.
Các đối thủ của họ quyết định chặn một số đường chưa trải nhựa để Mirko và Slavko không thể tìm được lộ trình tập luyện thỏa mãn các yêu cầu trên. Mỗi đường chưa trải nhựa có một chi phí chặn là số nguyên dương. Không thể chặn đường đã trải nhựa.
Cho mô tả mạng lưới thành phố và đường, hãy tìm tổng chi phí nhỏ nhất để chặn các đường sao cho không còn lộ trình tập luyện nào thỏa mãn các yêu cầu.
Mỗi thành phố là đầu mút của không quá \(10\) con đường. Giữa một cặp thành phố không bao giờ có nhiều hơn một con đường nối trực tiếp.
Ghi một số nguyên duy nhất: tổng chi phí chặn đường nhỏ nhất để không còn lộ trình tập luyện hợp lệ.
Lưu ý: Cách chia nhóm và tính điểm dưới đây là bản điều chỉnh để luyện tập trên hệ thống, không khẳng định tương đương cách chấm tại IOI gốc.
Mỗi nhóm được chấm độc lập: chỉ nhận điểm của nhóm khi vượt qua tất cả bộ kiểm thử trong nhóm; nếu có bộ kiểm thử không đạt thì nhóm nhận 0 điểm. Tổng điểm tối đa là 100.
Nhãn nhóm là phần số trong tên tệp dữ liệu gốc. Tất cả tệp cùng nhãn, kể cả các hậu tố chữ và pf, đều thuộc nhóm đó.
Mỗi nhóm có trọng số 1. Có 11 nhóm tính điểm; điểm cuối cùng bằng \(100 \times W / 11\), với \(W\) là tổng trọng số các nhóm đạt. Mỗi nhóm đạt đóng góp chính xác \(100/11\) điểm; không làm tròn riêng từng nhóm.
| Nhãn nhóm | Điểm | Tệp dữ liệu vào gốc |
|---|---|---|
| 1 | \(100/11\) | training/training.in.1a, training/training.in.1b |
| 2 | \(100/11\) | training/training.in.2a, training/training.in.2b |
| 3 | \(100/11\) | training/training.in.3a, training/training.in.3b |
| 4 | \(100/11\) | training/training.in.4a, training/training.in.4b |
| 5 | \(100/11\) | training/training.in.5a, training/training.in.5b |
| 6 | \(100/11\) | training/training.in.6a, training/training.in.6b |
| 7 | \(100/11\) | training/training.in.7a, training/training.in.7b |
| 8 | \(100/11\) | training/training.in.8a, training/training.in.8b, training/training.in.8c |
| 9 | \(100/11\) | training/training.in.9a, training/training.in.9b, training/training.in.9c |
| 10 | \(100/11\) | training/training.in.10a, training/training.in.10b, training/training.in.10c, training/training.in.10d |
| 11 | \(100/11\) | training/training.in.11a, training/training.in.11b, training/training.in.11c, training/training.in.11d |
Các ví dụ trong đề không tính điểm.
Ví dụ 1
5 8
2 1 0
3 2 0
4 3 0
5 4 0
1 3 2
3 5 2
2 4 5
2 5 1
5
Hình dưới biểu diễn các thành phố và con đường trong ví dụ này. Những đường trải nhựa được vẽ đậm.
Có năm lộ trình tập luyện khả dĩ, được minh họa dưới đây.
Nếu chặn các đường \(1\)–\(3\), \(3\)–\(5\) và \(2\)–\(5\), Mirko và Slavko không thể sử dụng bất kỳ lộ trình nào trong năm lộ trình. Tổng chi phí chặn ba đường này là \(5\).
Cũng có thể chỉ chặn hai đường \(2\)–\(4\) và \(2\)–\(5\), nhưng khi đó chi phí lớn hơn, bằng \(6\).
Ví dụ 2
9 14
1 2 0
1 3 0
2 3 14
2 6 15
3 4 0
3 5 0
3 6 12
3 7 13
4 6 10
5 6 0
5 7 0
5 8 0
6 9 11
8 9 0
48