trang chủ / bài tập / binblock

Khối nhị phân

Đề bài

Mô tả

Cho một bức ảnh nhị phân kích thước n×m — mỗi ô là 0 hoặc 1. Bạn muốn nén bức ảnh theo cách sau:

  1. Chọn một số nguyên k>1.
  2. Nếu n hoặc m không chia hết cho k, thêm các hàng 0 ở phía dưới và các cột 0 ở phía bên phải sao cho cả hai chiều mới đều chia hết cho k.
  3. Chia bức ảnh sau khi đệm thành các khối có kích thước k×k. Mỗi khối phải có tất cả các ô bằng nhau (cùng 0 hoặc cùng 1).

Sau khi đệm, bạn được phép đảo (toggle) một số ô — biến 0 thành 1 hoặc ngược lại — để mọi khối k×k đều thuần nhất. Hãy chọn k và cách đảo sao cho tổng số ô bị đảo là nhỏ nhất.

Lưu ý: việc đệm các ô 0 không tính là phép đảo. Chỉ các ô bị thay đổi giá trị trong bức ảnh đã đệm (so với trạng thái ngay sau khi đệm) mới được tính.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm.
  • n dòng tiếp theo, mỗi dòng là một xâu nhị phân độ dài m mô tả bức ảnh.

Dữ liệu ra

  • In ra một số nguyên duy nhất là số ô tối thiểu cần đảo.

Ràng buộc

  • 2n,m2500.

Ví dụ

Input Output Giải thích
3 5
00100
10110
11001
5 Chọn k=2. Đệm thành lưới 4×6 (thêm một hàng 0 và một cột 0). Đảo 5 ô trong lưới đã đệm để mọi khối 2×2 đều thuần nhất.
3 5
00110
00110
01000
1 Chọn k=2. Đệm thành lưới 4×6. Chỉ cần đảo 1 ô là mọi khối 2×2 đều thuần nhất.
3 5
00000
10111
11011
8 Bức ảnh có rất nhiều ô 1 phân bố không đều, cần ít nhất 8 phép đảo.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0