| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2020 - Poster | 100 (p) | 2.0s | 1G |
| 2 | JOI 2020 - Strawberry | 100 (p) | 2.0s | 1G |
| 3 | JOI 2020 - Digit Sum | 100 (p) | 2.0s | 1G |
| 4 | JOI 2020 - Tenkey | 100 (p) | 2.0s | 1G |
| 5 | JOI 2020 - Rock-Scissors-Paper Expression | 100 (p) | 2.0s | 1G |
JOI đã làm một tấm áp phích để quảng bá hoạt động của lớp trong lễ hội văn hóa. Tấm áp phích có dạng bảng gồm \(N\) hàng và \(N\) cột, mỗi ô được tô màu đỏ, xanh lá cây hoặc xanh dương. Ô ở hàng \(i\) từ trên xuống và cột \(j\) từ trái sang (\(1 \le i,j \le N\)) có màu đỏ nếu \(S_{i,j}\) là R, xanh lá cây nếu là G, và xanh dương nếu là B.
Tuy nhiên, các bạn trong lớp chưa hài lòng với tấm áp phích này. Sau khi thảo luận, cả lớp quyết định giữ nguyên hình dạng bảng và thay đổi cách bố trí màu để làm một tấm áp phích mới. Trong tấm áp phích mới, ô ở hàng \(i\) từ trên xuống và cột \(j\) từ trái sang (\(1 \le i,j \le N\)) phải có màu đỏ nếu \(T_{i,j}\) là R, xanh lá cây nếu là G, và xanh dương nếu là B.
JOI sẽ lặp lại các thao tác sau trên tấm áp phích hiện có để tạo ra tấm áp phích mới:
Mỗi thao tác đều mất \(1\) phút. Cho thông tin về tấm áp phích hiện có và tấm áp phích cần tạo, hãy tìm số phút ít nhất để JOI tạo được tấm áp phích mới.
Dữ liệu được cho từ đầu vào chuẩn. Dòng đầu chứa \(N\). Tiếp theo là \(N\) dòng mô tả bảng \(S\), rồi \(N\) dòng mô tả bảng \(T\), theo thứ tự từ trên xuống. Mỗi dòng của một bảng chứa \(N\) ký tự liền nhau, theo thứ tự từ trái sang.
In ra một dòng chứa số phút ít nhất cần để tạo ra tấm áp phích mới.
R, G, B.R, G, B.Ví dụ 1
3
RRR
GGG
BBB
RRR
RRR
RRR
6
Tô lại tất cả các ô ở hàng \(2\) và hàng \(3\) thành màu đỏ. Việc này mất \(6\) phút.
Ví dụ 2
3
RRR
GGG
BBB
RGB
RGB
RGB
1
Xoay toàn bộ tấm áp phích \(90^\circ\) ngược chiều kim đồng hồ. Việc này mất \(1\) phút.
Ví dụ 3
6
RRRBBB
RRRBBB
RRRBBB
GGGRRG
GGGRRG
GGGBBR
RRRGGG
RRRGGG
RRRGGG
BBBRRB
BBBRRB
BBBGGR
10
Bản dịch tiếng Việt từ đề gốc tiếng Nhật của Ủy ban Olympic Tin học Nhật Bản. Đề gốc và bản dịch được cung cấp theo giấy phép CC BY-SA 4.0.
Trang trại dâu tây Just Oishi Ichigo (gọi tắt là trang trại JOI) nổi tiếng vì có hình dạng dài và hẹp theo hướng đông-tây. Lối vào nằm ở đầu phía tây của trang trại. Ta gọi vị trí cách lối vào \(k\) mét về phía đông là vị trí \(k\).
Trong trang trại có \(N\) quả dâu tây, được đánh số từ \(1\) đến \(N\). Ban đầu các quả đều còn xanh. Quả dâu thứ \(i\) (\(1 \le i \le N\)) nằm ở vị trí \(A_i\) và chín đỏ vào thời điểm \(T_i\).
Không thể thu hoạch một quả khi nó còn xanh; tức là chỉ có thể thu hoạch quả thứ \(i\) từ thời điểm \(T_i\) trở đi. Bạn xuất phát từ lối vào ở vị trí \(0\) vào thời điểm \(0\), di chuyển theo hướng đông hoặc tây với tốc độ tối đa \(1\) mét mỗi giây để thu hoạch dâu. Có thể bỏ qua thời gian thu hoạch.
Cho thông tin về trang trại, hãy tìm thời gian ít nhất để thu hoạch tất cả các quả dâu khi chúng đã chín đỏ, rồi trở về lối vào.
Dữ liệu được cho từ đầu vào chuẩn theo dạng:
N
A_1 T_1
A_2 T_2
...
A_N T_N
In ra một dòng chứa thời gian ít nhất, tính bằng giây, để thu hoạch tất cả các quả dâu khi chúng đã chín đỏ rồi trở về lối vào.
Ví dụ 1
10
1 3
2 1
3 4
4 1
5 5
6 9
7 2
8 6
9 5
10 3
20
Trong \(10\) giây đầu, đi đến vị trí \(10\); trên đường đi có thể lần lượt thu hoạch các quả \(2,4,5,7,8,9,10\). Sau đó, dành \(10\) giây quay về vị trí \(0\); trên đường về có thể lần lượt thu hoạch các quả \(6,3,1\). Như vậy, cả \(10\) quả đều được thu hoạch khi đã chín đỏ.
Ví dụ 2
10
0 450
5 445
10 430
15 405
20 370
25 325
30 270
35 205
40 130
45 45
450
Có thể di chuyển như sau để thu hoạch tất cả các quả khi đã chín đỏ trong \(450\) giây:
Ví dụ 3
15
11 23
3 94
89 3
38 58
65 29
41 3
80 42
22 76
48 85
83 98
87 29
97 96
22 75
57 25
99 33
198
Bản dịch tiếng Việt từ đề gốc tiếng Nhật của Ủy ban Olympic Tin học Nhật Bản. Đề gốc và bản dịch được cung cấp theo giấy phép CC BY-SA 4.0.
Ban đầu JOI có một số nguyên từ \(1\) đến \(N\). Sau khi thực hiện thao tác dưới đây không hoặc nhiều lần, số nguyên của JOI trở thành \(N\):
Cho \(N\), hãy tìm có bao nhiêu số nguyên có thể là số mà JOI có ban đầu.
Dữ liệu được cho từ đầu vào chuẩn gồm một dòng chứa \(N\).
In ra một dòng chứa số lượng số nguyên có thể là số mà JOI có ban đầu.
Ví dụ 1
13
4
Ví dụ, nếu JOI bắt đầu với số \(5\) và thực hiện thao tác \(3\) lần thì các số lần lượt là \(5 \to 10 \to 11 \to 13\). Chỉ có \(4\) số có thể là số ban đầu: \(5,10,11,13\).
Ví dụ 2
20
1
Ví dụ 3
2019
449
Bản dịch tiếng Việt từ đề gốc tiếng Nhật của Ủy ban Olympic Tin học Nhật Bản. Đề gốc và bản dịch được cung cấp theo giấy phép CC BY-SA 4.0.
JOI có một bàn phím số với các phím mang chữ số từ \(0\) đến \(9\), được bố trí như hình dưới đây. Lưu ý rằng không có phím nào ở ngay dưới phím \(2\) hoặc phím \(3\).
Trên bàn phím có một con trỏ chỉ vào một phím. Ban đầu con trỏ chỉ vào phím \(0\).
Trong mỗi thao tác, JOI có thể chọn một trong hai việc sau:
JOI muốn dùng bàn phím này để nhập một số nguyên dương có số dư bằng \(R\) khi chia cho \(M\). Vì thao tác trên bàn phím mất thời gian, JOI muốn dùng ít thao tác nhất có thể.
Cho \(M\) và \(R\), hãy tìm số thao tác ít nhất JOI cần thực hiện.
Dữ liệu được cho từ đầu vào chuẩn gồm một dòng chứa hai số nguyên \(M\) và \(R\).
In ra một dòng chứa số thao tác ít nhất để nhập một số nguyên dương có số dư bằng \(R\) khi chia cho \(M\).
Ví dụ 1
100000 13
5
Có thể nhập \(13\) bằng \(5\) thao tác sau. Không thể nhập một số thỏa mãn yêu cầu bằng \(4\) thao tác trở xuống, nên kết quả là \(5\).
Ví dụ 2
4 3
3
Có thể nhập \(11\) bằng \(3\) thao tác. Lưu ý rằng để nhập \(3\) cần ít nhất \(4\) thao tác, nên đó không phải là cách tối ưu.
Bản dịch tiếng Việt từ đề gốc tiếng Nhật của Ủy ban Olympic Tin học Nhật Bản. Đề gốc và bản dịch được cung cấp theo giấy phép CC BY-SA 4.0.
Trong bài toán này, ba lựa chọn búa, kéo, bao được ký hiệu lần lượt là R, S, P. R thắng S, S thắng P, và P thắng R.
Với hai lựa chọn \(x,y\), ta định nghĩa các phép toán x + y, x - y, x * y như sau. Đây không phải là các phép cộng, trừ, nhân thông thường.
x + y: nếu \(x \ne y\), kết quả là lựa chọn thắng trong hai lựa chọn \(x,y\); nếu \(x=y\), kết quả là \(x\).x - y: nếu \(x \ne y\), kết quả là lựa chọn thua trong hai lựa chọn \(x,y\); nếu \(x=y\), kết quả là \(x\).x * y: nếu \(x \ne y\), kết quả là lựa chọn còn lại trong R, S, P, khác cả \(x\) lẫn \(y\); nếu \(x=y\), kết quả là \(x\).Một biểu thức gồm các lựa chọn, các phép toán +, -, * và dấu ngoặc được tính theo những quy tắc sau:
R * (P + S) = R * S = P.* có độ ưu tiên cao hơn + và -. Ví dụ: R - P * S = R - (P * S) = R - R = R.+ với nhau, các phép - với nhau, + với -, và các phép * với nhau. Ví dụ: R - P + S = (R - P) + S = R + S = R.JOI có một biểu thức như trên, nhưng một số ký tự R, S, P trong đó đã bị che mất. Bạn được cho xâu \(E\) có độ dài \(N\), trong đó mỗi ký tự bị che được thay bằng ?. JOI muốn biết có bao nhiêu cách thay mỗi dấu ? bằng một trong ba ký tự R, S, P để giá trị của biểu thức bằng \(A\). Vì số cách có thể rất lớn, hãy tính số dư của số cách khi chia cho \(1\,000\,000\,007\).
Ngữ pháp được dùng trong bài toán được mô tả bằng BNF (ký pháp Backus-Naur) như sau. Biểu thức có một số ký tự bị che là một <expression>.
<expression> ::= <term> | <expression> "+" <term> | <expression> "-" <term>
<term> ::= <factor> | <term> "*" <factor>
<factor> ::= "R" | "S" | "P" | "?" | "(" <expression> ")"
Đây là một định nghĩa đệ quy. Chẳng hạn, một xâu là <expression> nếu nó là <term>, hoặc là kết quả nối lần lượt một xâu <expression>, ký tự + và một xâu <term>, hoặc là kết quả nối lần lượt một xâu <expression>, ký tự - và một xâu <term>.
Cho xâu \(E\) là một <expression> và kết quả cần đạt \(A\), hãy tính số cách thay các dấu ? bằng R, S, P để giá trị biểu thức bằng \(A\), lấy số dư khi chia cho \(1\,000\,000\,007\).
Dữ liệu được cho từ đầu vào chuẩn theo dạng:
N
E
A
In ra một dòng chứa số cách thay mỗi dấu ? bằng R, S hoặc P để giá trị biểu thức bằng \(A\), lấy số dư khi chia cho \(1\,000\,000\,007\).
<expression> theo định nghĩa trong đề bài.R, S hoặc P.Ví dụ 1
11
S+?-(R+?)*P
S
6
Có \(6\) cách thay hai dấu ? bằng R, S hoặc P để kết quả bằng S:
S + R - (R + R) * PS + R - (R + S) * PS + S - (R + R) * PS + S - (R + S) * PS + P - (R + R) * PS + P - (R + S) * PVí dụ 2
15
?+?-?*?+?-?*?+?
R
2187
Ví dụ 3
13
(((((R)))))+?
P
1
Ví dụ 4
1
P
S
0
Ví dụ 5
27
R+((?+S-?*P+?)-P*?+S-?)*R+?
P
381
Ví dụ 6
83
((R+?)*(?+?))*((?+?)*(?+?))*((?+?)*(?+?))-((S+?)*(?+?))*((?+?)*(?+?))*((?+?)*(?+?))
P
460353133
Có \(10\,460\,353\,203\) cách thay thỏa mãn yêu cầu. Vì vậy, cần in ra số dư khi chia số này cho \(1\,000\,000\,007\), là \(460\,353\,133\).
Bản dịch tiếng Việt từ đề gốc tiếng Nhật của Ủy ban Olympic Tin học Nhật Bản. Đề gốc và bản dịch được cung cấp theo giấy phép CC BY-SA 4.0.