Hướng dẫn cho TLE-oj Cup Round 5 - Bàn cờ bằng nhau


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

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: huyhau6a2

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_4b_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

Không có bình luận nào.