Hướng dẫn cho TLE-oj Cup Round 5 - Bàn cờ bằng nhau
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Subtask 1, 3
Các bạn chỉ cần cày trâu từng cặp bàn cờ là xong. Độ phức tạp O(\frac{n(n+1)}2\cdot k^2\cdot 4)
Note: Máy chấm TLE rất khỏe, sẽ không đời nào TLE đâu, trừ khi máy chấm bị gì gì đó hoặc code sai
Subtask 2
Ý tưởng được đặt ra là ta có thể nén bàn cờ thành số dưới dạng unsigned long long
trên c++. Từ đó ta có thể so sánh số thay vì so sánh cả bảng. Độ phức tạp O(\frac{n(n+1)}2\cdot 4)
Cải tiến 1: Giả sử 2 bàn cờ xoay thành tương ứng ra a_1,a_2,a_3,a_4 và b_1,b_2,b_3,b_4. Nếu 2 bàn cờ bằng nhau thì với mọi cách xoay của a luôn tìm ra cách xoay b thỏa mãn. Ta có thể thay vì lấy cả 4 cách xoay thì chỉ cần lấy 1 giá trị min hoặc max. Độ phức tạp chia 4 còn lại O(\frac{n(n+1)}2)
Cải tiến 2: Ta có thể đếm phân phối. Độ phức tạp chia 4 còn lại O(n\cdot log(n))
Subtask 4
Từ subtask 2, ta có thể nghĩ đến hash. Chú ý người ra đề có thể diệt các mod quen thuộc như 10^9+7;10^9+9;998244353. Bạn có thể dùng mod lớn hơn hoặc dùng nhiều mod (ví dụ 3 mod cùng lúc)
Dựa vào idea cải tiến 1, ta được độ phức tạp O(\frac{n(n+1)}2)
Subtask 5
Vẫn là subtask 4 nhưng dựa vào cải tiến 2, ta có độ phức tạp O(n\cdot log(n))
Bình luận