| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | LQDOJ Cup 2025 - Final Round - BWTREE | 100 (p) | 1.0s | 512M |
| 2 | LQDOJ Cup 2025 - Final Round - MARIO | 100 (p) | 1.5s | 512M |
| 3 | LQDOJ Cup 2025 - Final Round - ROADS | 100 (p) | 4.0s | 1G |
| 4 | LQDOJ Cup 2025 - Chung kết - ANDOR | 100 (p) | 1.0s | 256M |
| 5 | LQDOJ Cup 2025 - Chung kết - BARRAY | 100 (p) | 1.0s | 1G |
Cho hai số nguyên dương \(n\) và \(k\) (\(3 \le n \le 20\), \(k < 2^n\)). Ta dựng một cây nhị phân hoàn hảo có độ cao \(n\), đồng nghĩa với việc nó sẽ có \(2^n - 1\) đỉnh. Ban đầu tất cả các cạnh của cây đều được tô màu đỏ. Sau đó, ta thực hiện tuần tự \(k\) thao tác, mỗi thao tác ta được phép chọn một trong hai loại biến đổi sau đây vào cây:
Lưu ý rằng ta có thể chọn cùng một đỉnh \(u\) cho nhiều thao tác khác nhau. Nếu một cạnh đã được tô màu xanh thì sau khi tô màu xanh lần nữa, nó vẫn sẽ mang màu xanh.
Yêu cầu: Gọi \(B\) là tập hợp các cạnh được tô màu xanh sau khi thực hiện xong tất cả \(k\) thao tác. Hãy tính số lượng tất cả các tập \(B\) khả dĩ khác nhau. Vì kết quả có thể rất lớn nên bạn chỉ cần in ra phần dư của nó khi chia cho \(10^9 + 7\).
Test 1
3 1
6
Mario đã cứu được công chúa. Trước mặt họ là một hồ lớn dạng lưới \(n \times m\) ô vuông (đánh số hàng từ \(1\) đến \(n\), cột từ \(1\) đến \(m\)). Trên một số ô có cọc và các ô còn lại là nước. Hồ nước thoả mãn rằng với mọi ô nước \((x, y)\), tồn tại ít nhất một cọc ở một trong các ô \((x + 1, y + 1)\); \((x + 1, y - 1)\); \((x - 1, y + 1)\); \((x - 1, y - 1)\). Mỗi cọc mang một trong hai màu trắng hoặc đen.
Biết rằng Mario đang đứng trên cọc tại ô \((1, 1)\) và công chúa đang đứng trên cọc tại ô \((1, 2)\). Từ ô \((x, y)\) có cọc, nhân vật có thể nhảy qua \(1\) ô có cọc khác ở các vị trí: \((x + 2, y)\); \((x - 2, y)\); \((x, y + 2)\); \((x, y - 2)\); \((x + 2, y + 2)\); \((x + 2, y - 2)\); \((x - 2, y + 2)\); \((x - 2, y - 2)\).
Hai nhân vật có nhiệm vụ thăm tất cả các cọc hiện có trên hồ (mỗi cọc được ghé thăm bởi ít nhất một người). Biết rằng với dữ liệu đầu vào, việc thăm hết các cọc là khả thi.
Khi nhiệm vụ hoàn tất, tất cả các ô nước sẽ mọc lên các cọc, biến cả hồ thành bình địa \(n \times m\) toàn cọc, sẵn sàng cho lễ cưới. Các cọc vừa mọc lên đều chưa có màu; Mario sẽ tô màu trắng hoặc đen cho chúng. Các cọc đã có màu ban đầu phải được giữ nguyên.
Yêu cầu: Công chúa có \(q\) khu vực yêu thích, mỗi khu vực là một hình vuông \(2 \times 2\) xác định bởi tọa độ góc trên–trái \((r_i, c_i)\) (\(1 \le r_i < n\), \(1 \le c_i < m\)). Với mỗi khu vực \(2 \times 2\) này, không được phép tô toàn đen, toàn trắng, hoặc đan xen kiểu bàn cờ vua (hai màu xen kẽ theo ô chéo). Hãy giúp Mario tìm một phương án tô màu hợp lệ cho các cọc sau khi chúng mọc lên. Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.
Mỗi dòng trong số \(n\) dòng tiếp theo chứa một xâu \(m\) ký tự mô tả trạng thái ban đầu của hồ:
. — ô nước (chưa có cọc).W — ô có cọc màu trắng.B — ô có cọc màu đen.Bảo đảm ô \((1, 1)\) và \((1, 2)\) là ký tự W hoặc B.
Dòng tiếp theo chứa số nguyên \(q\) (\(0 \le q \le (n - 1)(m - 1)\)).
W hoặc B, biểu diễn phương án tô màu cuối cùng.-1.Test 1
3 2
WB
..
BW
2
2 1
1 1
WB
WW
BW
Một mẫu \(2 \times 2\) checkerboard là một trong hai cấu hình xen kẽ theo đường chéo:
Chính phủ đang triển khai một dự án quy hoạch giao thông quốc gia, bao gồm \(n\) tỉnh thành độc lập. Hiện tại, giữa các tỉnh chưa có tuyến đường nào được xây dựng.
Bộ Giao thông đã đề xuất \(m\) tuyến đường hai chiều tiềm năng. Mỗi tuyến nối hai tỉnh khác nhau và cần một khoản kinh phí nhất định để thi công. Tỉnh \(i\) có thể tự huy động tối đa \(c_i\) tỷ đồng cho dự án. Tuyến đường thứ \(j\) nối giữa hai tỉnh \(v_j\) và \(u_j\), với chi phí thi công là \(w_j\) tỷ đồng. Các tỉnh có thể góp ngân sách lại để cùng xây dựng đường. Khi hai tỉnh (hoặc hai cụm tỉnh đã kết nối) xây xong một tuyến đường, họ trở thành một liên vùng chung, và toàn bộ ngân sách còn lại của liên vùng sẽ được hợp nhất.
Nguyên tắc tài chính khi xây dựng:
Yêu cầu: Xác định xem có thể chọn một tập hợp các tuyến đường và sắp xếp thứ tự thi công sao cho tất cả các tỉnh đều được kết nối giao thông với nhau hay không. Nếu có thể, hãy đưa ra thứ tự các tuyến cần thi công.
-1.Test 1
3 2
2 2 10
1 2 5
2 3 8
2
2 1
Mỗi chiếc chìa khóa có \(n\) rãnh đánh số từ \(0\), rãnh thứ \(i\) có độ sâu \(A[i]\) là một số nguyên không âm \(60\)-bit.
Bạn muốn đánh ra một chiếc chìa sơ cua, nhưng vì nhìn bằng mắt thường không thể xác định vẽ lại chính xác độ sâu của từng rãnh, vì thế phải đưa vào dụng cụ đo. Nói cách khác, ban đầu bạn không biết giá trị của mảng \(A\).
Dụng cụ đo có hai chế độ:
AND i1 i2 i3: bạn sẽ chọn ra ba vị trí rãnh thỏa mãn \(0 \le i_1 < i_2 < i_3 < n\), và chìa khóa sẽ trả về \(A[i_1] \ \& \ A[i_2] \ \& \ A[i_3]\) là giá trị của phép AND ba số.OR i1 i2 i3: bạn sẽ chọn ra ba vị trí rãnh thỏa mãn \(0 \le i_1 < i_2 < i_3 < n\), và chìa khóa sẽ trả về \(A[i_1] \ | \ A[i_2] \ | \ A[i_3]\) là giá trị của phép OR ba số.Biết rằng:
Mỗi số nguyên không âm \(60\)-bit \(X\) luôn tồn tại một bộ số nhị phân \((x_{59}, x_{58}, x_{57}, \dots, x_1, x_0)\) duy nhất sao cho \(\forall i, 0 \le i < 60 : 0 \le x_i \le 1\) và
Giả sử hai số \(X\) và \(Y\) có bộ số tương ứng là \((x_{59}, x_{58}, x_{57}, \dots, x_1, x_0)\) và \((y_{59}, y_{58}, y_{57}, \dots, y_1, y_0)\). Khi đấy:
Có \(\tau\) chiếc chìa khóa như vậy. Với mỗi chìa khóa, bạn hãy tìm cách dùng ít lần đo nhất để xác định được chính xác hình dáng của các rãnh khóa.
Bạn cần cài đặt hàm vector<long long> keyDuplication(int n), mỗi lần gọi hàm tương ứng với một chiếc chìa khóa có \(n\) rãnh bạn cần xác định độ sâu. Hàm cần trả về một vector<long long> gồm \(n\) phần tử, phần tử thứ \(i\) của vector có giá trị bằng \(A[i]\).
Trong cài đặt của hàm keyDuplication, bạn được phép gọi tới một trong hai hàm sau thuộc thư viện andor.h:
long long AND(int i1, int i2, int i3) nhận vào ba vị trí theo thứ tự \(i_1, i_2, i_3\), với điều kiện \(0 \le i_1 < i_2 < i_3 < n\), và trả về \(A[i_1] \ \& \ A[i_2] \ \& \ A[i_3]\).long long OR(int i1, int i2, int i3) nhận vào ba vị trí theo thứ tự \(i_1, i_2, i_3\), với điều kiện \(0 \le i_1 < i_2 < i_3 < n\), và trả về \(A[i_1] \ | \ A[i_2] \ | \ A[i_3]\).Khi chấm bài, với mỗi test, hàm keyDuplication sẽ được gọi \(\tau\) lần, mỗi lần gọi tương ứng với một trường hợp chìa khóa cần xác định.
#include "andor.h" ở dòng đầu tiên của chương trình.main. Việc viết hàm main có thể gây ra lỗi biên dịch cho bài làm của thí sinh.Wrong Answer nếu như tham số truyền vào hàm AND hoặc hàm OR không hợp lệ, hay kết quả trả về của hàm keyDuplication không chính xác.Chương trình chấm mẫu nhận vào dữ liệu đầu vào theo mẫu sau:
Chương trình chấm mẫu sẽ in ra \(\tau\) dòng, dòng thứ \(i\) cho biết chiếc chìa khóa thứ \(i\) đã được đoán đúng hay sai.
Với mỗi chiếc chìa khóa, giả sử bạn đoán đúng độ sâu của cả \(N\) rãnh thông qua \(\beta\) phép đo lường. Giám khảo đã ấn định trước \(5\) số \(\alpha_1 \le \alpha_2 \le \alpha_3 \le \alpha_4 \le \alpha_5 < N^3\).
Điểm của test là mức hệ số điểm nhỏ nhất của các lần đoán chìa khóa trong test đó.
Giá trị các rãnh chìa khóa là cố định từ trước khi thực hiện các câu hỏi.
Giả sử ta phải xác định chiếc chìa khóa có \(N = 6\) và \(A = [12, 23, 34, 45, 56, 67]\). Khi đó, hàm keyDuplication(6) được gọi.
Giả sử trong trường hợp này hàm gọi tới các hàm sau:
AND(1, 3, 5) trả về \(1\).OR(0, 2, 3) trả về \(47\).Cuối cùng, hàm trả về mảng {12, 23, 34, 45, 56, 67}.
Cho dãy \(A\) gồm \(N\) phần tử \(A_1, A_2, \dots, A_N\). Bạn được phép thay đổi vị trí các phần tử trong dãy \(A\) một cách tùy ý.
Hãy biến đổi dãy \(A\) sao cho sau khi biến đổi:
Với một dãy \(A\) bất kỳ, gọi
với mỗi cặp chỉ số \(i < j\) sao cho \(A_i = A_j\) và không tồn tại chỉ số \(k\) với \(i < k < j\) thỏa mãn \(A_i = A_k = A_j\).
Nói cách khác, với mỗi giá trị xuất hiện trong dãy, ta xét các vị trí xuất hiện của nó theo thứ tự tăng dần. Với mỗi hai lần xuất hiện liên tiếp của cùng một giá trị, ta tính hiệu chỉ số \(j - i\) và lấy giá trị lớn nhất trong tất cả các hiệu này. Nếu không tồn tại cặp chỉ số \(i, j\) thỏa mãn (tức là mọi phần tử đều phân biệt), khi đó \(D = 0\).
Yêu cầu: Hãy biến đổi dãy \(A\) (tức là chọn một hoán vị của các phần tử trong dãy ban đầu) sao cho:
Nếu không tồn tại cách biến đổi thỏa mãn điều kiện không có hai phần tử liên tiếp bằng nhau, hãy in ra \(-1\).
Dữ liệu đảm bảo tổng các giá trị \(N\) trong tất cả các bộ dữ liệu không vượt quá \(10^6\).
Với mỗi bộ dữ liệu:
Test 1
1
6
3 3 3 2 2 1
2
3 2 3 2 3 1
Kết quả này cho \(100\%\) số điểm.
Test 2
1
6
3 3 3 2 2 1
3
3 2 1 3 2 3
Kết quả này cho \(50.4\%\) số điểm.
Test 3
1
6
3 3 3 2 2 1
2
3 3 3 1 2 2
Kết quả này cho \(20\%\) số điểm.
Với mỗi bộ dữ liệu:
Điểm của thí sinh cho mỗi test là điểm nhỏ nhất mà thí sinh nhận được trên tất cả các bộ dữ liệu của test đó.