| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2011 - Deciphering | 100 (p) | 0.5s | 64M |
| 2 | JOI 2011 - Report | 100 (p) | 0.5s | 64M |
| 3 | JOI 2011 - UFO | 100 (p) | 1.0s | 256M |
Bạn có được một tài liệu mật của nước IOI, được viết bằng các chữ cái từ A đến Z. Bản gốc của tài liệu được viết bằng ngôn ngữ IOI. Có thể thu được bản gốc bằng cách xóa một số ký tự trong tài liệu mật, có thể không xóa ký tự nào.
Một câu trong ngôn ngữ IOI là một chuỗi có ít nhất một ký tự, thỏa mãn \(M\) quy tắc đôi một khác nhau. Quy tắc thứ \(i\) \((1\le i\le M)\) quy định rằng ký tự \(B_i\) không được xuất hiện ngay sau ký tự \(A_i\).
Tính số bản gốc có thể có của tài liệu mật, lấy phần dư khi chia cho \(10\,000\,000\). Nếu những cách xóa khác nhau tạo ra cùng một chuỗi bản gốc thì chỉ tính chuỗi đó một lần.
Đọc từ đầu vào chuẩn:
A đến Z.A đến Z, cách nhau bởi một dấu cách, mô tả quy tắc thứ \(i\). Không tồn tại \(j\ne i\) sao cho đồng thời \(A_j=A_i\) và \(B_j=B_i\).In ra đầu ra chuẩn một dòng chứa số bản gốc có thể có, lấy phần dư khi chia cho \(10\,000\,000\).
Giới hạn của kỳ thi gốc: thời gian CPU \(0{,}5\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(20\) bộ dữ liệu, mỗi bộ \(5\) điểm. Các điều kiện về tỷ lệ điểm dưới đây có thể chồng lấp:
Ví dụ 1
5
JOIOI
1
I O
15
Các bản gốc có thể có là I, II, J, JI, JII, JO, JOI, JOII, JOO, JOOI, O, OI, OII, OO, OOI.
Ví dụ 2
26
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0
7108863
Ủy ban Olympic Tin học Nhật Bản là một tổ chức rất coi trọng việc báo cáo, liên lạc và trao đổi. Ủy ban có \(N\) người; mỗi người có đúng một người được chỉ định làm người nhận báo cáo của mình.
Ủy ban sắp triển khai một dự án gồm \(N\) công việc, được đánh số từ \(1\) đến \(N\). Mỗi người được giao phụ trách một công việc khác nhau. Các công việc được thực hiện lần lượt theo thứ tự từ công việc \(1\) đến công việc \(N\).
Khi hoàn thành công việc, người phụ trách gửi một báo cáo công việc cho người nhận báo cáo của mình. Người nhận được báo cáo tiếp tục chuyển chính báo cáo đó đến người nhận báo cáo của họ. Tuy nhiên, nếu một người đã từng chuyển báo cáo về công việc đó thì người ấy không chuyển lại báo cáo đó nữa. Quá trình này được lặp lại, nhờ đó một số người trong ủy ban nhận được báo cáo. Chỉ sau khi tất cả việc chuyển báo cáo của công việc trước kết thúc, công việc tiếp theo mới được thực hiện.
Cho biết người nhận báo cáo của người phụ trách từng công việc. Với mỗi người, hãy tính số loại báo cáo công việc khác nhau mà người đó đã nhận được tại thời điểm bắt đầu thực hiện công việc của mình.
Đọc từ đầu vào chuẩn:
In ra \(N\) dòng. Dòng thứ \(i\) \((1\le i\le N)\) chứa một số nguyên là số loại báo cáo công việc khác nhau mà người phụ trách công việc \(i\) đã nhận được khi bắt đầu công việc của mình.
Giới hạn của kỳ thi gốc: thời gian CPU \(0{,}5\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Ví dụ 1
6
3
4
2
6
3
2
0
1
1
3
0
5
Trong mô tả sau, người \(i\) là người phụ trách công việc \(i\). Mỗi mũi tên biểu diễn một lần chuyển báo cáo giữa hai người liên tiếp; toàn bộ chuỗi chuyển báo cáo kết thúc trước khi công việc kế tiếp bắt đầu.
Đây là bài chỉ nộp kết quả (output-only). Bạn cần nộp tệp kết quả cho từng tệp dữ liệu vào.
Người ngoài hành tinh đến từ hành tinh IOI dự định xây dựng một sân bay UFO tại công viên JOI ở Nhật Bản. Sự tồn tại của công viên này được giữ bí mật với người dân thông thường. Họ đã khảo sát công viên và lập bản đồ những nơi UFO có thể hạ cánh.
Công viên JOI là một hình chữ nhật rộng \(W\) mét theo hướng đông–tây và dài \(H\) mét theo hướng bắc–nam, được chia thành \(W\times H\) ô vuông cạnh \(1\) mét. Ô ở cột thứ \(x\) tính từ phía tây và hàng thứ \(y\) tính từ phía bắc được ký hiệu là \((x,y)\). Ô ở góc tây bắc là \((1,1)\), còn ô ở góc đông nam là \((W,H)\). Mỗi ô thuộc một trong hai loại: có thể hạ cánh, ký hiệu bằng ., hoặc không thể hạ cánh, ký hiệu bằng w.
UFO do người ngoài hành tinh IOI chế tạo nằm gọn trong một hình chữ nhật rộng \(B\) mét và sâu \(D\) mét. Theo thiết kế, khi UFO hạ cánh, các hướng trên, dưới, trái, phải trong bản thiết kế phải lần lượt tương ứng với các hướng bắc, nam, tây, đông; góc trên bên trái của bản thiết kế phải trùng với góc trên bên trái của một ô trong công viên.
Bản thiết kế UFO là một lưới gồm \(D\) hàng và \(B\) cột, tổng cộng \(B\times D\) ô. Ô ở cột thứ \(i\) từ trái sang và hàng thứ \(j\) từ trên xuống được ký hiệu là \((i,j)\). Ô trên cùng bên trái là \((1,1)\), ô dưới cùng bên phải là \((B,D)\). Ô \((i,j)\) cho biết liệu UFO có chiếm một phần của vùng vuông nằm cách mép phía tây của UFO từ \(i-1\) đến \(i\) mét và cách mép phía bắc từ \(j-1\) đến \(j\) mét hay không. Ô có chứa một phần UFO được ký hiệu bằng O (chữ O hoa); ô không chứa phần nào của UFO được ký hiệu bằng ..
Khi một UFO hạ cánh, mọi ô có ký hiệu O trong bản thiết kế phải nằm trên các ô có thể hạ cánh của công viên. Khi nhiều UFO cùng hạ cánh, không ô nào thuộc một UFO được chung cạnh với bất kỳ ô nào thuộc một UFO khác. Tuy nhiên, các UFO được phép tiếp xúc tại góc của các ô.
Bạn tình cờ được chọn làm đại sứ thiện chí của hành tinh IOI. Hãy lập phương án xây dựng sân bay có thể đón càng nhiều UFO hạ cánh càng tốt.
Lập phương án sân bay UFO trong công viên JOI. Phương án cho phép càng nhiều UFO hạ cánh thì điểm càng cao.
Phương án là bản đồ công viên JOI được bổ sung các UFO đã hạ cánh. Trong các ô có thể hạ cánh, dùng O (chữ O hoa) cho ô có chứa UFO và . cho ô không chứa UFO. Các ô không thể hạ cánh vẫn được biểu diễn bằng w.
Tải bộ dữ liệu vào, gồm năm tệp 01.in, 02.in, 03.in, 04.in, 05.in.
Mỗi tệp dữ liệu vào có định dạng sau:
O hoặc ., biểu diễn ô \((i,j)\) của bản thiết kế.. hoặc w, biểu diễn ô \((x,y)\) của công viên.Tệp kết quả gồm \(H\) dòng. Dòng thứ \(y\) \((1\le y\le H)\) chứa một chuỗi gồm \(W\) ký tự, mô tả hàng thứ \(y\) tính từ phía bắc của công viên. Ký tự thứ \(x\) \((1\le x\le W)\) trên dòng này là một trong ba ký tự O, ., w, biểu diễn trạng thái của ô \((x,y)\) trong phương án.
Nộp kết quả tương ứng với từng tệp dữ liệu vào. Mỗi kết quả phải tuân thủ định dạng được quy định trong phần Dữ liệu ra.
Trong kỳ thi gốc, phản hồi khi nộp bài chỉ kiểm tra kết quả có đúng định dạng hay không. Việc phương án có hợp lệ và được bao nhiêu điểm được xác định theo phần Chấm điểm.
Bài có \(5\) tệp dữ liệu, mỗi tệp tối đa \(20\) điểm, tổng cộng \(100\) điểm. Mỗi tệp được gán một giá trị \(X\) như trong bảng dưới. Gọi \(Y\) là số UFO hạ cánh lớn nhất trong các phương án mà các thí sinh đã nộp cho tệp đó.
Nếu phương án của bạn không thỏa mãn các điều kiện của bài toán, bạn nhận \(0\) điểm cho tệp đó. Nếu phương án hợp lệ, gọi \(\alpha\) là số UFO có thể hạ cánh trong phương án của bạn. Điểm được tính như sau:
Trong cả hai trường hợp, làm tròn điểm đến một chữ số sau dấu phẩy: nếu chữ số thập phân thứ hai từ \(5\) trở lên thì làm tròn lên, nếu không thì làm tròn xuống.
| Tệp dữ liệu vào | \(B\) | \(D\) | \(W\) | \(H\) | \(X\) |
|---|---|---|---|---|---|
01 |
\(1\) | \(1\) | \(15\) | \(15\) | \(90\) |
02 |
\(1\) | \(1\) | \(10\) | \(200\) | \(750\) |
03 |
\(3\) | \(3\) | \(100\) | \(100\) | \(500\) |
04 |
\(5\) | \(5\) | \(180\) | \(180\) | \(1270\) |
05 |
\(5\) | \(5\) | \(200\) | \(200\) | \(1050\) |
Ví dụ 1
4 3
O..O
OOOO
.O..
20 10
....................
.w......w.......ww..
....ww......w.w.....
.w.....w............
...w......w.........
w................ww.
....w...............
.w.....w........w.ww
............w.......
....w..............w
..O..O......O..O....
.wOOOO.Ow.O.OOOOww..
...Oww.OOOO.wOw.O..O
.w.....wO..O..O.OOOO
.O.wO.O..OwOOOO..O..
wOOOO.OOOO..O...OwwO
..O.w..O..O..O..OOOO
Ow.O.O.wO.OOOO..wOww
OOOO.OOOO..Ow.......
.O..w.O............w
Phương án trong kết quả mẫu cho phép \(11\) UFO hạ cánh.