| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | EJOI 2026 - Automata | 100 (p) | 2.0s | 1G |
| 2 | EJOI 2026 - Elevator | 100 (p) | 10.0s | 64M |
| 3 | EJOI 2026 - Teamfulness | 100 (p) | 4.0s | 1G |
Có \(N\) ô liên tiếp, đánh số \(0,\ldots,N-1\), với độ cao \(p_i\) tạo thành một hoán vị của \(0,\ldots,N-1\). Hai ô là gần nhau khi khoảng cách chỉ số không quá \(1\).
Robot nhận hai loại lệnh. MAX chuyển robot đến ô cao nhất trong các ô gần vị trí hiện tại; MIN chuyển đến ô thấp nhất. Ô hiện tại cũng được xét nên robot có thể đứng yên.
Mỗi truy vấn cho một tập vị trí bắt đầu. Hãy xác định có tồn tại một chuỗi hữu hạn các lệnh MIN/MAX đưa robot đến cùng một ô cuối, bất kể vị trí bắt đầu được chọn trong tập hay không. Không cần dựng chuỗi lệnh.
Submission C++ phải include automata.h và cài đặt:
void initialize(std::vector<int> p);
bool exists_program(std::vector<int> x);
initialize được gọi đúng một lần. Sau đó exists_program được gọi \(Q\) lần; x chứa các chỉ số theo thứ tự tăng nghiêm ngặt.
Submission không đọc standard input. Sample grader đọc \(N,Q\), hoán vị \(p\), rồi từng truy vấn.
Submission không ghi standard output. Mỗi đáp án được trả từ exists_program.
< nếu \(N\) chẵn và > nếu \(N\) lẻ.Ví dụ 1
3 3
0 2 1
2 0 2
3 0 1 2
2 1 2
111
Ví dụ 2
7 3
0 4 2 1 3 5 6
3 0 1 3
3 1 3 4
2 3 6
001
Đề bài EJOI 2026 được phát hành theo giấy phép Creative Commons Attribution (CC BY).
Tòa nhà có các tầng \(0,\ldots,N\) và một sân thượng phía trên tầng \(N\). Mỗi tầng \(f\) có một cư dân chỉ biết giá trị bí mật \(v_f\in[0,3]\). Karlsson ở sân thượng muốn khôi phục càng nhiều giá trị càng tốt.
Thang máy bắt đầu ở tầng \(0\) và chỉ đi lên. Ban đầu chưa có nút nào được nhấn; nút đã nhấn sẽ giữ nguyên. Thang dừng ở tầng \(0\) và ở mỗi tầng có nút được nhấn từ một điểm dừng trước đó. Tại tầng \(f\), cư dân thấy toàn bộ tập nút hiện tại và có thể nhấn một tập các nút chưa nhấn có số tầng lớn hơn \(f\). Sau tầng được nhấn cao nhất, thang đi thẳng lên sân thượng.
Karlsson chỉ thấy tập nút cuối cùng. Các tiến trình không được trao đổi bằng bất kỳ cách nào khác.
Submission C++ phải include elevator.h và cài đặt:
std::vector<int> press_buttons(
int subtask, int N, int f, int v, std::vector<int> p);
std::vector<int> answer(
int subtask, int N, std::vector<int> p);
press_buttons chỉ được gọi ở tầng thang mở cửa. Vector p chứa các nút đã nhấn theo thứ tự tăng; kết quả phải gồm các nút mới, đôi một khác nhau, chưa thuộc p, và thỏa \(f<x\le N\).
answer được gọi đúng một lần cho mỗi kịch bản khi thang tới sân thượng. Vector trả về phải có \(N+1\) phần tử: giá trị đã khôi phục ở vị trí tương ứng hoặc -1 nếu chưa biết.
Đây là bài giao tiếp. Chương trình chạy thành \(N+2\) tiến trình độc lập: một tiến trình cho mỗi tầng và một cho sân thượng. Không được giả sử có trạng thái toàn cục dùng chung. Các kịch bản có thể được xử lý theo thứ tự khác nhau ở mỗi tiến trình.
Submission không đọc standard input. Manager đọc tối đa \(T\) kịch bản và chuyển dữ liệu qua giao diện.
Submission không ghi standard output. Các nút mới và đáp án được trả từ hai hàm.
Nếu có một giá trị khôi phục sai hoặc thao tác không hợp lệ, phân nhóm nhận \(0\). Gọi \(K\) là số giá trị khôi phục nhỏ nhất trên mọi kịch bản. Điểm lần lượt là: nhóm 1, \(\min(0.25K,15)\); nhóm 2, \(0.5K\) khi \(K<30\), \(2K-45\) khi \(30\le K<40\), và \(35\) khi \(K\ge40\); nhóm 3, \(\min(0.5K,15)\); nhóm 4, \(0.7K\) khi \(K<20\), \(4K-66\) khi \(20\le K<25\), và \(35\) khi \(K\ge25\).
Trong ví dụ chính thức, thang dừng ở tầng \(0\), rồi các tầng \(2\), \(13\), \(42\); tập nút cuối là {2,13,42}. Karlsson trả đúng \(v_0=1\), \(v_2=0\) và -1 ở các vị trí chưa khôi phục.
Đề bài EJOI 2026 được phát hành theo giấy phép Creative Commons Attribution (CC BY).
Có \(N\) địa điểm tạo thành một cây. Địa điểm \(i\) thuộc đội \(a_i\in[0,K-1]\); một đội có thể chiếm nhiều địa điểm hoặc không có địa điểm nào.
Một đường đi đơn được gọi là thú vị nếu có độ dài lớn nhất trong mọi đường đi đơn của cây, tức là một đường kính. Độ đa dạng đội của đường đi là số đội phân biệt xuất hiện trên đó.
Hãy tính tổng độ đa dạng đội trên mọi đường đi thú vị khác nhau. Hai đường đi được xem là giống nhau khi chúng đi qua cùng tập đỉnh, nên hai hướng đi không tạo hai đường khác nhau.
Submission C++ phải include teamfulness.h và cài đặt:
long long teamfulness(
int N, int K,
std::vector<int> a,
std::vector<int> u,
std::vector<int> v);
Hai vector u,v có \(N-1\) phần tử và cạnh thứ \(i\) nối u[i] với v[i]. Hàm được gọi đúng một lần.
Submission không đọc standard input. Sample grader đọc \(N,K\), dãy đội và \(N-1\) cạnh.
Submission không ghi standard output. Kết quả được trả từ teamfulness.
Ví dụ 1
6 3
1 0 0 1 2 1
0 1
0 2
0 3
0 4
0 5
21
Ví dụ 2
7 1
0 0 0 0 0 0 0
0 1
0 2
1 3
1 4
2 5
2 6
4
Ví dụ 3
6 3
0 1 2 0 1 2
0 1
1 2
2 3
1 4
2 5
11
EJOI 2026 - Ngày 2, Teamfulness.
Đề bài EJOI 2026 được phát hành theo giấy phép Creative Commons Attribution (CC BY).