Đường Đi Đẹp

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1400 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

ami có một bảng hình chữ nhật A có kích thước \(m \times n\). Các hàng được đánh số từ \(1\) đến \(m\), các cột được đánh số từ \(1\) đến \(n\), và ô nằm trên hàng \(i\), cột \(j\) được gọi là ô \(A_{i,j}\). Hiện tại ô \(A_{i,j}\) được tô màu đen hoặc hồng. Một bảng hình chữ nhật bất kỳ được gọi là blink nếu từ ô \((1, 1)\) tồn tại đường đi đến ô \((m, n)\) thoả mãn điều kiện sau:

  1. Từ một ô \((i, j)\) chỉ được đi xuống dưới \((i+1, j)\) hoặc qua phải \((i, j+1)\), và không được đi ra ngoài bảng.
  2. Tất cả các ô trên đường đi đều là màu hồng.

Các bạn cần biến bảng thành blink bằng cách thực hiện ít lần nhất các thao tác sau: chọn một hình chữ nhật con trong bảng và đổi màu tất cả các ô trong hình chữ nhật đó (đen thành hồng và hồng thành đen).

Input

  • Dòng đầu tiên chứa 2 số nguyên dương \(m\)\(n\) là kích cỡ của bảng.
  • \(m\) dòng sau, dòng \(i\) chứa \(n\) kí tự \(a_{i,j}\).
  • \(a_{i,j}\) = # biểu thị một ô màu đen và \(a_{i,j}\) = . biểu thị một ô màu hồng.

Output

  • Một số nguyên là số thao tác ít nhất.

Example

Test 1

Input
3 3
.#.
.#.
...
Output
0
Note

Ở ví dụ 1, không cần áp dụng thao tác nào.

Test 2

Input
2 2
.#
##
Output
1
Note

Ở ví dụ 2, có thể áp dụng thao tác vào hình chữ nhật có góc trái trên là \((2, 1)\), góc phải dưới là \((2, 2)\). Bảng sẽ trở thành:

.#

..

Giới hạn

  • \(100\%\) test có \(1 \leq n, m \leq 100\).

Bình luận

Mới nhất
Tải bình luận...

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