#1569. PIKACHU - Trò chơi Pikachu

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Trò chơi Pikachu là một trò chơi trên một bảng hình chữ nhật kích thước 𝑚×𝑛 ô vuông kích thước đơn vị. Các dòng được đánh số từ 1 đến 𝑚 , từ trên xuống dưới. Các cột được đánh số từ 1 đến 𝑛 , từ trái qua phải. Ô nằm ở vị trí dòng 𝑖 và cột 𝑗 của bảng được gọi là ô (𝑖, 𝑗) . Mỗi ô của bảng hoặc được để trống hoặc chứa một biểu tượng. Mỗi lượt, bạn được chọn hai ô chứa hai biểu tượng giống nhau và xóa chúng thành trống nếu tâm (giao điểm của hai đường chéo) của hai ô này có thể nối với nhau bằng một đường gấp khúc gồm không quá 𝑘 đoạn thẳng độ dài nguyên, mỗi đoạn song song với cạnh của bảng, ngoại trừ hai ô cần xoá, đường gấp khúc này chỉ qua các ô trống hay nằm ngoài bảng. Bạn được gọi là giành chiến thắng nếu có thể xóa trống toàn bộ bảng.

Yêu cầu: Cho hai số 𝑚, 𝑛 và bảng số kích thước 𝑚×𝑛 mô tả trạng thái bảng ban đầu, hãy xác định giá trị 𝑘 nhỏ nhất để có thể xóa trống toàn bộ bảng.

Dữ liệu:

  • Dòng đầu tiên chứa hai số nguyên 𝑚, 𝑛 ;
  • Tiếp theo là 𝑚 dòng, mỗi dòng chứa 𝑛 số nguyên không âm có giá trị không vượt quá 1000 mô tả trạng thái bảng của trò chơi. Số 0 cho biết là ô trống, số nguyên dương cho biết loại biểu tượng. Chú ý rằng, mỗi loại biểu tượng xuất hiện đúng hai lần.

Kết quả:

  • Ghi ra giá trị số 𝑘 nhỏ nhất tìm được. Trong trường hợp không thể xóa trống toàn bộ bảng ghi -1 .

Ví dụ:

Dữ liệu:

2 2
1 1
2 2

Kết quả:

1

Dữ liệu:

2 4
2 1 0 0
3 3 2 1

Kết quả:

2

Ràng buộc:

  • 25\% số test có 𝑚=𝑛=2 ;
  • 25\% số test khác có 𝑚=1; 𝑛≤500 ;
  • 25\% số test khác có 𝑚=2;𝑛≤500 ;
  • 25\% số test còn lại có 𝑚×𝑛≤1000 ;