| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2022 - Broken Device 2 | 100 (p) | 2.0s | 512M |
| 2 | JOI 2022 - Sprinkler | 100 (p) | 4.0s | 1G |
| 3 | JOI 2022 - Ants and Sugar | 100 (p) | 4.0s | 1G |
Anna và Bruno là hai cao thủ cá cược. Họ chơi một trò chơi với D-taro, người chia bài.
Trong trò chơi này, Anna và Bruno ở hai phòng khác nhau. Họ chỉ có thể liên lạc qua một thiết bị bị hỏng. D-taro đưa cho Anna một số nguyên; mục tiêu của Anna và Bruno là dùng thiết bị để truyền số nguyên đó từ Anna sang Bruno.
Khi trò chơi bắt đầu, trước tiên Anna công bố một số nguyên \(m\) từ \(1\) đến \(2000\), kể cả hai đầu mút. Sau đó, họ chơi \(Q\) lượt. Lượt thứ \(i\) (\(1\le i\le Q\)) diễn ra như sau:
Hãy viết các chương trình thực hiện chiến lược của Anna và Bruno để họ thắng cả \(Q\) lượt.
Ta nói dãy \(Z\) được tạo bằng cách trộn xen kẽ (riffle shuffle) hai dãy \(X,Y\) nếu có thể chia các phần tử của \(Z\) thành hai nhóm sao cho:
Ví dụ, \(Z=[1,1,1,0,0,0]\) có thể được tạo từ \(X=[1,1,0]\) và \(Y=[1,0,0]\): các phần tử thứ \(1,2,4\) của \(Z\) tạo thành \(X\), còn các phần tử thứ \(3,5,6\) tạo thành \(Y\).
Ngược lại, với \(X=[1,1,0]\), \(Y=[1,0,0]\) và \(Z=[0,0,0,1,1,1]\), không thể tạo \(Z\) bằng cách trộn xen kẽ \(X,Y\).
Bạn cần nộp hai tệp.
Tệp thứ nhất là Anna.cpp, cài đặt chiến lược của Anna. Tệp này phải dùng chỉ thị #include để nạp Anna.h và cài đặt các hàm sau:
int Declare();
std::pair<std::vector<int>, std::vector<int> > Anna(long long A);
Hàm Declare được gọi đúng một lần lúc bắt đầu. Giá trị trả về là số nguyên \(m\) do Anna công bố. Nếu \(m\) không nằm trong đoạn \([1,2000]\), chương trình bị chấm Wrong Answer [1].
Sau lời gọi Declare, hàm Anna được gọi \(Q\) lần. Lời gọi thứ \(i\) tương ứng với bước \(1\) và bước \(2\) của lượt thứ \(i\):
A là số nguyên \(A_i\) do D-taro đưa cho Anna.Wrong Answer [2].Wrong Answer [3].Wrong Answer [4].Tệp thứ hai là Bruno.cpp, cài đặt chiến lược của Bruno. Tệp này phải dùng chỉ thị #include để nạp Bruno.h và cài đặt hàm sau:
long long Bruno(std::vector<int> u);
Sau mỗi lần Anna đưa các dãy vào thiết bị, hàm Bruno được gọi một lần, tổng cộng \(Q\) lần. Lời gọi thứ \(i\) tương ứng với bước \(3\) và bước \(4\) của lượt thứ \(i\):
u là dãy \(u_i\) do thiết bị gửi cho Bruno.Wrong Answer [5].Gói tệp phát kèm trên trang cuộc thi chứa chương trình chấm mẫu và các tệp chương trình mẫu. Chương trình chấm mẫu nằm trong grader.cpp. Đặt grader.cpp, Anna.cpp, Bruno.cpp, Anna.h, Bruno.h trong cùng một thư mục và biên dịch bằng lệnh:
g++ -std=gnu++17 -O2 -o grader grader.cpp Anna.cpp Bruno.cpp
Nếu biên dịch thành công, tệp thực thi grader được tạo. Chương trình chấm thực tế khác chương trình chấm mẫu. Chương trình chấm mẫu chỉ chạy trong một tiến trình, đọc đầu vào chuẩn và ghi kết quả ra đầu ra chuẩn.
Chương trình chấm mẫu đọc dữ liệu theo định dạng:
Q
A_1
A_2
...
A_Q
Chương trình chấm mẫu ghi các thông tin sau ra đầu ra chuẩn:
Declare, chẳng hạn Accepted: 2000.Wrong Answer [1].Nếu chương trình vi phạm nhiều loại lỗi, chương trình chấm mẫu chỉ thông báo một trong số đó.
Trong chương trình chấm mẫu, phép trộn ở mỗi lượt được chọn bằng bộ sinh số giả ngẫu nhiên. Kết quả không đổi giữa các lần chạy có cùng hạt giống. Có thể thay hạt giống bằng cách truyền một số nguyên làm đối số thứ nhất, chẳng hạn:
./grader 2022
Gọi \(m^*\) là giá trị lớn nhất trong các số nguyên \(m\) mà Anna công bố trên tất cả các bộ dữ liệu của nhóm 6. Lưu ý đây là giá trị công bố, không phải độ dài lớn nhất thực tế của các dãy được trả về.
| Giá trị \(m^*\) | Điểm nhóm 6 |
|---|---|
| \(201\le m^*\le2000\) | \(\left\lfloor40-25\log_{10}\left(\frac{m^*}{200}\right)\right\rfloor\) |
| \(161\le m^*\le200\) | \(40\) |
| \(156\le m^*\le160\) | \(44\) |
| \(151\le m^*\le155\) | \(48\) |
| \(146\le m^*\le150\) | \(52\) |
| \(141\le m^*\le145\) | \(56\) |
| \(m^*\le140\) | \(60\) |
Ví dụ 1
Dữ liệu vào của trình chấm mẫu:
2
42
2000
Lời gọi hàm
| Lời gọi | Giá trị trả về |
|---|---|
Declare() |
4 |
Anna(42) |
([0, 0, 1, 0], [1, 1, 0, 1]) |
Bruno([1, 0, 0, 1, 0, 1, 0, 1]) |
42 |
Anna(2000) |
([0, 1], [0, 0]) |
Bruno([0, 0, 1, 0]) |
2000 |
Giải thích
Ví dụ có \(Q=2\) lượt. Ở lượt 1, D-taro đưa \(A_1=42\) cho Anna; ở lượt 2, D-taro đưa \(A_2=2000\) cho Anna.
Ví dụ này thỏa mãn các nhóm \(1,2,3,4,5,6\) .
JOI 2021/2022, kỳ thi tuyển chọn mùa xuân, ngày thi thứ ba (22/03/2022). Đề của Ủy ban Olympic Tin học Nhật Bản (JCIOI). Bản dịch tiếng Việt theo giấy phép CC BY-SA 4.0.
JOI-kun có nhiều năm kinh nghiệm trồng rau trong vườn nhà. Giờ đây, cậu dự định quản lý trang trại IOI.
Trang trại IOI gồm \(N\) mảnh đất, đánh số từ \(1\) đến \(N\), và \(N-1\) con đường, đánh số từ \(1\) đến \(N-1\). Con đường thứ \(i\) nối hai mảnh đất \(A_i,B_i\) theo cả hai chiều. Có thể đi từ bất kỳ mảnh đất nào đến bất kỳ mảnh đất nào khác qua các con đường. Mỗi mảnh đất có một vòi phun nước để tưới các mảnh đất xung quanh.
JOI-kun muốn trồng kê JOI trong trang trại. Đây là một loài cây kỳ lạ: chiều cao thay đổi ngay khi được tưới nước. Tuy nhiên, cây rất yếu; mỗi khi chiều cao lớn hơn hoặc bằng \(L\), phần ngọn dài \(L\) lập tức gãy ra. JOI-kun thu hoạch những phần bị gãy này.
Ban đầu, trên mảnh đất thứ \(j\) có một cây kê JOI cao \(H_j\). Trong \(Q\) ngày tiếp theo, mỗi ngày thứ \(k\) (\(1\le k\le Q\)), JOI-kun thực hiện một trong hai thao tác:
Khoảng cách giữa hai mảnh đất là số con đường ít nhất cần đi qua để di chuyển từ mảnh đất này đến mảnh đất kia.
Để kiểm tra cây có phát triển đúng kế hoạch không, JOI-kun muốn tính trước chiều cao đo được trong từng thao tác loại 2. Hãy viết chương trình tính những chiều cao đó từ thông tin trang trại và kế hoạch chăm sóc.
Dữ liệu được cho theo định dạng sau. Mọi giá trị đều là số nguyên.
N L
A_1 B_1
A_2 B_2
...
A_{N-1} B_{N-1}
H_1
H_2
...
H_N
Q
(Truy vấn 1)
(Truy vấn 2)
...
(Truy vấn Q)
Truy vấn thứ \(k\) bắt đầu bằng số nguyên \(T_k\) và có một trong hai dạng:
1 X_k D_k W_k: tưới tất cả mảnh đất cách \(X_k\) không quá \(D_k\), nhân chiều cao mỗi cây được tưới với \(W_k\), rồi áp dụng quy tắc gãy ngọn nêu trên.2 X_k: đo chiều cao cây trên mảnh đất \(X_k\).Với mỗi truy vấn loại 2, theo thứ tự xuất hiện, in chiều cao cây trên mảnh đất được hỏi. Mỗi kết quả nằm trên một dòng.
Ví dụ 1
4 7
1 2
2 3
3 4
1
1
1
1
11
1 2 1 2
1 1 0 2
2 1
2 2
2 3
2 4
1 4 10 2
2 1
2 2
2 3
2 4
4
2
2
1
1
4
4
2
Ban đầu, cả bốn cây đều cao \(1\).
Ngày 1, tưới từ mảnh đất \(2\) trong bán kính \(1\) làm chiều cao ở các mảnh đất \(1,2,3\) được nhân với \(2\). Chiều cao ở các mảnh đất \(1,2,3,4\) trở thành \(2,2,2,1\).
Ngày 2, tưới từ mảnh đất \(1\) trong bán kính \(0\) chỉ làm chiều cao ở mảnh đất \(1\) được nhân với \(2\). Các chiều cao trở thành \(4,2,2,1\).
Ngày 7, tưới từ mảnh đất \(4\) trong bán kính \(10\) làm cả bốn chiều cao được nhân với \(2\), thành \(8,4,4,2\). Cây ở mảnh đất \(1\) có chiều cao vượt \(L=7\) nên phần ngọn dài \(7\) gãy ra. Cuối cùng các chiều cao là \(1,4,4,2\).
Ví dụ này thỏa mãn các nhóm \(1,5,6\) .
Ví dụ 2
6 10
5 6
1 2
1 4
2 6
3 6
9
2
3
4
9
1
10
1 5 1 7
2 4
1 4 1 9
1 5 0 7
2 1
1 1 1 3
1 6 1 4
2 5
2 4
2 3
4
1
4
8
2
Ngày 1, tưới từ mảnh đất \(5\) trong bán kính \(1\) làm chiều cao ở các mảnh đất \(5,6\) được nhân với \(7\), thành \(63,7\). Ở mảnh đất \(5\), phần ngọn dài \(L=10\) liên tục gãy ra cho đến khi chiều cao nhỏ hơn \(10\). Cuối cùng chiều cao ở hai mảnh đất này lần lượt là \(3,7\).
Ví dụ này thỏa mãn các nhóm \(1,2,3,6\) .
Ví dụ 3
8 10
1 3
3 5
4 7
6 7
4 5
7 8
2 4
5
8
6
4
6
2
9
3
11
1 2 2 0
2 1
1 6 1 0
2 4
2 6
1 5 2 0
2 8
1 7 2 0
2 6
2 7
2 4
5
0
0
3
0
0
0
Ví dụ này thỏa mãn các nhóm \(1,3,4,6\) .
JOI 2021/2022, kỳ thi tuyển chọn mùa xuân, ngày thi thứ ba (22/03/2022). Đề của Ủy ban Olympic Tin học Nhật Bản (JCIOI). Bản dịch tiếng Việt theo giấy phép CC BY-SA 4.0.
JOI-kun là một nhà sinh học. Cậu dự định thực hiện một thí nghiệm với kiến và các viên đường.
Thí nghiệm diễn ra trên một thanh thẳng dài \(10^9\), đặt theo chiều từ trái sang phải. Điểm cách đầu trái của thanh một khoảng \(x\) được gọi là điểm có tọa độ \(x\).
Ban đầu, trên thanh không có gì. JOI-kun thực hiện \(Q\) thao tác. Thao tác thứ \(i\) (\(1\le i\le Q\)) được mô tả bởi ba số nguyên \(T_i,X_i,A_i\):
Kiến và đường rất nhỏ nên có thể có nhiều con kiến hoặc nhiều viên đường tại cùng một điểm. Nhiều thao tác cũng có thể được thực hiện tại cùng một tọa độ.
Những con kiến trong thí nghiệm có một đặc tính kỳ lạ. Nếu JOI-kun vỗ tay, mỗi con kiến thực hiện hành động sau đúng một lần: nếu có viên đường nào cách nó không quá \(L\), nó tùy ý chọn một viên như vậy và ăn viên đó. Có thể nhiều con kiến cùng ăn một viên đường vào cùng một thời điểm.
Với mỗi \(k\) từ \(1\) đến \(Q\), hãy trả lời câu hỏi: giả sử JOI-kun vỗ tay sau thao tác thứ \(k\), số viên đường lớn nhất có thể được ít nhất một con kiến ăn là bao nhiêu?
Hãy viết chương trình trả lời tất cả các câu hỏi từ dãy thao tác và giá trị \(L\).
Lưu ý JOI-kun không thực sự vỗ tay trong quá trình thực hiện các thao tác. Vì vậy, vị trí của kiến không thay đổi và các viên đường không bị ăn mất; mỗi câu hỏi là một giả định riêng trên toàn bộ những gì đã được đặt lên thanh.
Dữ liệu được cho theo định dạng sau. Mọi giá trị đều là số nguyên.
Q L
T_1 X_1 A_1
T_2 X_2 A_2
...
T_Q X_Q A_Q
In \(Q\) dòng. Dòng thứ \(k\) ghi số viên đường lớn nhất có thể được ít nhất một con kiến ăn nếu JOI-kun vỗ tay sau thao tác thứ \(k\).
Ví dụ 1
4 1
1 1 1
2 2 1
1 3 1
2 0 1
0
1
1
2
Ví dụ này thỏa mãn các nhóm \(1,2,4\) .
Ví dụ 2
20 1
2 16 778913911
1 7 558407445
1 1 589762439
1 17 74646747
1 1 149104909
1 15 956697952
2 6 389372991
2 4 867453845
1 15 157353445
1 9 846177695
1 7 747107163
2 10 525670462
2 16 478912944
2 6 301733761
2 12 132966485
1 1 748012313
2 10 830922632
1 19 969484637
1 13 370330582
1 1 464798040
0
0
0
74646747
74646747
778913911
1168286902
1168286902
1168286902
1168286902
1168286902
1693957364
2103741597
2405475358
2405475358
2405475358
2725982591
2725982591
2858949076
2858949076
Ví dụ này thỏa mãn các nhóm \(1,2,4\) .
Ví dụ 3
20 6
2 27 12
2 9 11
1 36 10
2 39 4
2 14 9
2 33 7
2 38 20
2 0 20
2 25 16
1 14 3
1 13 19
2 6 4
2 15 6
2 33 4
1 12 11
1 44 1
2 17 14
2 12 19
1 48 18
2 30 16
0
0
0
4
4
10
10
10
10
13
30
30
32
32
40
41
44
44
44
44
Ví dụ này thỏa mãn các nhóm \(1,4\) .
Ví dụ 4
20 268886972
1 984472666 733463744
1 478477245 94817772
1 242536956 330762563
1 65794782 319137646
1 320548477 937296140
1 815011370 938193848
1 565184190 917533785
1 245417414 534089975
1 529908772 977043962
1 603891865 700935654
2 167042244 479827216
2 173921297 798343455
2 916159596 810126726
2 999299355 465535307
2 965968070 501768990
2 936073643 174976034
2 832859952 778072072
2 955489596 704853861
2 246733786 382428992
2 227669861 390905006
0
0
0
0
0
0
0
0
0
0
479827216
1278170671
2088297397
2553832704
2949828263
2949828263
3727900335
3727900335
4110329327
4501234333
Ví dụ này thỏa mãn các nhóm \(1,3,4\) .
JOI 2021/2022, kỳ thi tuyển chọn mùa xuân, ngày thi thứ ba (22/03/2022). Đề của Ủy ban Olympic Tin học Nhật Bản (JCIOI). Bản dịch tiếng Việt theo giấy phép CC BY-SA 4.0.