trang chủ / bài tập / transfig / lời giải

Lớp Biến Hình

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Hướng tiếp cận

Bài toán yêu cầu tìm số phép biến hình ít nhất để biến bảng A thành bảng B, trong đó mỗi phép biến hình chọn ô (r,c) và đảo toàn bộ hình chữ nhật từ (r,c) đến (N,M). Lời giải dựa trên mảng sai phân XOR 2D.

Nhận xét quan trọng

  1. Gộp hai bảng: Đặt D[i][j]=A[i][j]B[i][j]. Bài toán trở thành: tìm số phép ít nhất để biến D thành toàn 0.

  2. Mảng sai phân XOR 2D: Định nghĩa: d[i][j]=D[i][j]D[i1][j]D[i][j1]D[i1][j1] (với D[i][j]=0 khi i<1 hoặc j<1). Mảng d có tính chất: D có thể được phục hồi từ d bằng tiền tố XOR 2D.

  3. Tác động của phép biến hình: Phép biến hình tại (r,c) đảo tất cả D[i][j] với ir,jc. Trong mảng sai phân, thao tác này chỉ thay đổi đúng 1 ô d[r][c] (toggle giá trị tại đó), vì các thay đổi ở các ô khác triệt tiêu nhau.

  4. Kết quả: Mỗi phép biến hình toggle đúng 1 ô trong d. Để đưa D về toàn 0, ta cần d cũng toàn 0. Vậy số phép tối thiểu bằng số ô có giá trị 1 trong mảng sai phân d.

Thuật toán

  1. Đọc hai bảng AB.
  2. Với mỗi ô (i,j), tính: d[i][j]=(A[i][j]B[i][j])(A[i1][j]B[i1][j])(A[i][j1]B[i][j1])(A[i1][j1]B[i1][j1])
  3. Đếm số ô có d[i][j]=1. Đó là đáp án.

Độ phức tạp

  • Thời gian: O(NM) - duyệt qua mỗi ô đúng 1 lần.
  • Bộ nhớ: O(NM) - lưu hai bảng AB.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0