| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | IOI 2008 - Linear Garden | 100 (p) | 1.5s | 64M |
| 2 | IOI 2008 - Teleporters | 100 (p) | 1.0s | 64M |
| 3 | IOI 2008 - Pyramid Base | 100 (p) | 5.0s | 256M |
Ramesses II vừa trở về sau một trận chiến thắng lợi. Để kỷ niệm chiến thắng, ông quyết định xây dựng một khu vườn tráng lệ. Khu vườn sẽ gồm một hàng cây dài, kéo từ cung điện của ông ở Luxor đến đền Karnak. Hàng cây chỉ gồm cây sen và cây cói giấy, vì hai loài cây này lần lượt tượng trưng cho Thượng Ai Cập và Hạ Ai Cập.
Khu vườn phải có đúng \(N\) cây. Ngoài ra, khu vườn phải cân bằng: trong bất kỳ đoạn liên tiếp nào của hàng cây, số cây sen và số cây cói giấy không được chênh lệch quá \(2\).
Có thể biểu diễn một khu vườn bằng một xâu gồm các chữ cái L (cây sen) và P (cây cói giấy). Chẳng hạn, với \(N=5\), có \(14\) khu vườn cân bằng. Theo thứ tự từ điển, đó là: LLPLP, LLPPL, LPLLP, LPLPL, LPLPP, LPPLL, LPPLP, PLLPL, PLLPP, PLPLL, PLPLP, PLPPL, PPLLP và PPLPL.
Ta sắp xếp tất cả các khu vườn cân bằng có cùng độ dài theo thứ tự từ điển, với L đứng trước P, rồi đánh số bắt đầu từ \(1\). Ví dụ, với \(N=5\), khu vườn số \(12\) là PLPPL.
Cho số cây \(N\) và một xâu biểu diễn một khu vườn cân bằng, hãy viết chương trình tính số thứ tự được gán cho khu vườn đó, lấy modulo số nguyên \(M\) cho trước. Giá trị \(M\) chỉ nhằm đơn giản hóa việc tính toán, không có ý nghĩa nào khác đối với việc giải bài toán.
Đọc từ đầu vào chuẩn:
L (cây sen) hoặc P (cây cói giấy), biểu diễn một khu vườn cân bằng.Ghi ra đầu ra chuẩn một dòng chứa một số nguyên từ \(0\) đến \(M-1\), kể cả hai đầu: số thứ tự của khu vườn được mô tả trong dữ liệu vào, lấy modulo \(M\).
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 | 3 | lin/lin1.in |
| 2 | 3 | lin/lin2.in |
| 3 | 3 | lin/lin3.in |
| 4 | 3 | lin/lin4.in |
| 5 | 4 | lin/lin5.in |
| 6 | 4 | lin/lin6.in |
| 7 | 4 | lin/lin7.in |
| 8 | 4 | lin/lin8.in |
| 9 | 4 | lin/lin9.in |
| 10 | 4 | lin/lin10.in |
| 11 | 4 | lin/lin11.in |
| 12 | 5 | lin/lin12a.in, lin/lin12b.in |
| 13 | 5 | lin/lin13a.in, lin/lin13b.in |
| 14 | 5 | lin/lin14a.in, lin/lin14b.in, lin/lin14c.in |
| 15 | 5 | lin/lin15.in |
| 16 | 5 | lin/lin16.in |
| 17 | 5 | lin/lin17.in |
| 18 | 5 | lin/lin18.in |
| 19 | 5 | lin/lin19.in |
| 20 | 5 | lin/lin20.in |
| 21 | 5 | lin/lin21.in |
| 22 | 5 | lin/lin22.in |
| 23 | 5 | lin/lin23a.in, lin/lin23b.in, lin/lin23c.in |
Các ví dụ trong đề không tính điểm. Các tệp ví dụ gốc có nhãn 0 được giữ lại riêng và có trọng số 0.
Tệp ví dụ gốc: lin/lin0a.in, lin/lin0b.in.
Ví dụ 1
5
7
PLPPL
5
Số thứ tự thực sự được gán cho PLPPL là \(12\). Vì vậy, kết quả là \(12 \bmod 7 = 5\).
Ví dụ 2
12
10000
LPLLPLPPLPLL
39
IOI 2008, ngày thi thứ hai: Linear Garden, bản tiếng Anh 1.1. Tác giả đề bài: Aleksandar Ilić (Serbia). Tập đề bài và lời giải IOI 2008.
Bạn đang tham gia một cuộc thi đi xuyên Ai Cập từ tây sang đông dọc theo một đoạn thẳng. Ban đầu, bạn ở đầu mút phía tây của đoạn thẳng. Quy tắc của cuộc thi yêu cầu bạn luôn di chuyển dọc theo đoạn thẳng và luôn đi về phía đông.
Trên đoạn thẳng có \(N\) thiết bị dịch chuyển tức thời. Mỗi thiết bị có hai đầu mút. Mỗi khi bạn đi tới một đầu mút của thiết bị, thiết bị lập tức đưa bạn tới đầu mút còn lại. Tùy vào đầu mút mà bạn gặp, lần dịch chuyển này có thể đưa bạn về phía đông hoặc phía tây so với vị trí hiện tại. Sau khi được dịch chuyển, bạn phải tiếp tục đi về phía đông dọc theo đoạn thẳng; bạn không thể tránh bất kỳ đầu mút nào nằm trên đường đi của mình. Không có hai đầu mút của các thiết bị ở cùng một vị trí. Mọi đầu mút đều nằm hẳn bên trong đoạn thẳng, không trùng với điểm bắt đầu hoặc điểm kết thúc.
Mỗi lần được dịch chuyển, bạn nhận được \(1\) điểm. Mục tiêu của cuộc thi là kiếm được nhiều điểm nhất có thể. Để tăng số điểm, bạn được phép thêm tối đa \(M\) thiết bị mới vào đoạn thẳng trước khi bắt đầu hành trình. Bạn cũng được tính điểm khi sử dụng các thiết bị mới.
Bạn có thể đặt các đầu mút của thiết bị mới ở bất kỳ vị trí nào, kể cả vị trí có tọa độ không nguyên, miễn là không trùng với vị trí của một đầu mút khác. Nói cách khác, vị trí của tất cả các đầu mút, thuộc cả thiết bị cũ lẫn thiết bị mới, phải đôi một khác nhau. Các đầu mút mới cũng phải nằm hẳn giữa điểm bắt đầu và điểm kết thúc của đoạn thẳng.
Dữ liệu bảo đảm rằng dù bạn thêm các thiết bị như thế nào theo các quy tắc trên, bạn vẫn luôn có thể đi tới điểm kết thúc của đoạn thẳng.
Cho vị trí các đầu mút của \(N\) thiết bị ban đầu và số thiết bị mới tối đa \(M\) mà bạn được thêm, hãy viết chương trình tính số điểm lớn nhất bạn có thể kiếm được.
Đọc từ đầu vào chuẩn:
Không có hai đầu mút nào của các thiết bị cho trước có cùng vị trí. Đoạn thẳng mà bạn đi trên đó bắt đầu tại vị trí \(0\) và kết thúc tại vị trí \(2\,000\,001\).
Ghi ra đầu ra chuẩn một dòng chứa một số nguyên: số điểm lớn nhất bạn có thể kiếm đượ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 | 2 | tel/tel1.in |
| 2 | 2 | tel/tel2.in |
| 3 | 2 | tel/tel3.in |
| 4 | 3 | tel/tel4.in |
| 5 | 3 | tel/tel5.in |
| 6 | 3 | tel/tel6.in |
| 7 | 3 | tel/tel7.in |
| 8 | 3 | tel/tel8.in |
| 9 | 3 | tel/tel9.in |
| 10 | 3 | tel/tel10.in |
| 11 | 3 | tel/tel11.in |
| 12 | 7 | tel/tel12a.in, tel/tel12b.in |
| 13 | 7 | tel/tel13a.in, tel/tel13b.in, tel/tel13c.in |
| 14 | 8 | tel/tel14.in |
| 15 | 8 | tel/tel15.in |
| 16 | 8 | tel/tel16a.in, tel/tel16b.in |
| 17 | 8 | tel/tel17a.in, tel/tel17b.in |
| 18 | 8 | tel/tel18a.in, tel/tel18b.in, tel/tel18c.in |
| 19 | 8 | tel/tel19a.in, tel/tel19b.in, tel/tel19c.in, tel/tel19d.in |
| 20 | 8 | tel/tel20a.in, tel/tel20b.in, tel/tel20c.in, tel/tel20d.in |
Các ví dụ trong đề không tính điểm. Các tệp ví dụ gốc có nhãn 0 được giữ lại riêng và có trọng số 0.
Tệp ví dụ gốc: tel/tel0a.in, tel/tel0b.in.
Ví dụ 1
3
1
10 11
1 4
2 3
6
Hình thứ nhất cho thấy đoạn thẳng với ba thiết bị ban đầu. Hình thứ hai cho thấy đoạn thẳng đó sau khi thêm một thiết bị mới có hai đầu mút tại \(0{,}5\) và \(1{,}5\).
Sau khi thêm thiết bị như trong hình, hành trình của bạn diễn ra như sau:
Ví dụ 2
3
3
5 7
6 10
1999999 2000000
12
IOI 2008, ngày thi thứ hai: Teleporters, bản tiếng Anh 1.2. Tác giả đề bài: Masaki Watanabe (Nhật Bản). Tập đề bài và lời giải IOI 2008.
Bạn được giao nhiệm vụ tìm vị trí lớn nhất trong khả năng chi trả để xây dựng một kim tự tháp mới. Để hỗ trợ việc lựa chọn, bạn được cung cấp bản khảo sát một khu đất, đã được chia thành một lưới gồm \(M \times N\) ô vuông. Đáy kim tự tháp phải là một hình vuông có các cạnh song song với các cạnh của lưới.
Bản khảo sát ghi nhận \(P\) chướng ngại vật có thể chồng lấn lên nhau. Mỗi chướng ngại vật được mô tả bằng một hình chữ nhật trên lưới, có các cạnh song song với các cạnh của lưới. Để xây kim tự tháp, mọi ô nằm dưới đáy của nó phải được dọn sạch tất cả chướng ngại vật. Chi phí loại bỏ chướng ngại vật thứ \(i\) là \(C_i\). Khi loại bỏ một chướng ngại vật, phải loại bỏ toàn bộ nó, không được chỉ loại bỏ một phần. Việc loại bỏ một chướng ngại vật không ảnh hưởng đến bất kỳ chướng ngại vật nào khác chồng lấn với nó.
Cho kích thước \(M,N\) của khu đất, mô tả \(P\) chướng ngại vật cùng chi phí loại bỏ từng chướng ngại vật và ngân sách \(B\), hãy viết chương trình tìm độ dài cạnh lớn nhất có thể của đáy kim tự tháp sao cho tổng chi phí loại bỏ chướng ngại vật không vượt quá \(B\).
Đọc từ đầu vào chuẩn:
Ô ở góc dưới bên trái của lưới có tọa độ \((1,1)\); ô ở góc trên bên phải có tọa độ \((M,N)\). Các tọa độ của một chướng ngại vật chỉ các ô ngoài cùng thuộc chướng ngại vật đó, kể cả các ô ở hai góc được cho.
Ghi ra đầu ra chuẩn một dòng chứa một số nguyên: độ dài cạnh lớn nhất của đáy kim tự tháp mà bạn có thể chuẩn bị. Nếu không thể xây bất kỳ kim tự tháp nào, hãy in \(0\).
Các ràng buộc sau áp dụng cho mọi nhóm dữ liệu:
Các ràng buộc theo chỉ số \(i\) áp dụng với mọi \(1 \le i \le P\).
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 | pbs/pbs1.in |
| 2 | 5 | pbs/pbs2.in |
| 3 | 5 | pbs/pbs3pf.in |
| 4 | 5 | pbs/pbs4pf.in |
| 5 | 5 | pbs/pbs5.in |
| 6 | 5 | pbs/pbs6a.in, pbs/pbs6b.in |
| 7 | 5 | pbs/pbs7a.in, pbs/pbs7b.in |
| 8 | 7 | pbs/pbs8a.in, pbs/pbs8b.in, pbs/pbs8c.in |
| 9 | 7 | pbs/pbs9a.in, pbs/pbs9b.in, pbs/pbs9c.in |
| 10 | 7 | pbs/pbs10a.in, pbs/pbs10b.in, pbs/pbs10c.in, pbs/pbs10d.in |
| 11 | 7 | pbs/pbs11apf.in, pbs/pbs11bpf.in, pbs/pbs11cpf.in |
| 12 | 7 | pbs/pbs12a.in, pbs/pbs12b.in, pbs/pbs12c.in, pbs/pbs12d.in, pbs/pbs12e.in, pbs/pbs12f.in |
| 13 | 10 | pbs/pbs13apf.in, pbs/pbs13bpf.in |
| 14 | 10 | pbs/pbs14a.in, pbs/pbs14b.in, pbs/pbs14c.in |
| 15 | 10 | pbs/pbs15a.in, pbs/pbs15b.in, pbs/pbs15c.in, pbs/pbs15d.in, pbs/pbs15e.in |
Các ví dụ trong đề không tính điểm. Các tệp ví dụ gốc có nhãn 0 được giữ lại riêng và có trọng số 0.
Tệp ví dụ gốc: pbs/pbs0a.in, pbs/pbs0b.in.
Ví dụ 1
6 9
42
5
4 1 6 3 12
3 6 5 6 9
1 3 3 8 24
3 8 6 9 21
5 1 6 2 20
4
Ví dụ 2
13 5
0
8
8 4 10 4 1
4 3 4 4 1
10 2 12 2 2
8 2 8 4 3
2 4 6 4 5
10 3 10 4 8
12 3 12 4 13
2 2 4 2 21
3
IOI 2008, ngày thi thứ hai: Pyramid Base, bản tiếng Anh 1.3. Tác giả đề bài: Richard Peng (Canada). Tập đề bài và lời giải IOI 2008.