Đảo hàng và đảo cột
Đề bài
Mô tả
Cho ma trận nhị phân kích thước , tức là mỗi phần tử bằng hoặc .
Bạn được thực hiện một số thao tác (có thể là không thao tác nào). Mỗi thao tác thuộc một trong hai loại:
- Chọn một hàng và đảo toàn bộ giá trị trên hàng đó ( thành , thành );
- Chọn một cột và đảo toàn bộ giá trị trên cột đó.
Ma trận được gọi là đã sắp xếp nếu dãy thu được khi đọc các phần tử theo thứ tự từ trái sang phải, từ trên xuống dưới
là một dãy không giảm.
Hãy xác định xem có thể đưa ma trận về trạng thái đã sắp xếp hay không, và nếu có thì chỉ ra một cách thực hiện.
Đảo cùng một hàng (hoặc cùng một cột) hai lần sẽ đưa nó về như cũ, và thứ tự thực hiện các thao tác không ảnh hưởng đến kết quả cuối cùng. Vì vậy một lời giải chỉ cần cho biết mỗi hàng và mỗi cột có bị đảo hay không.
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên và : số hàng và số cột của ma trận.
- dòng tiếp theo, mỗi dòng chứa số nguyên. Số thứ trên dòng thứ là .
Dữ liệu ra
Nếu không thể đưa ma trận về trạng thái đã sắp xếp, in ra NO.
Ngược lại, in ra YES ở dòng đầu tiên. Dòng thứ hai in xâu độ dài , trong đó bằng 1 nếu hàng thứ bị đảo và bằng 0 nếu ngược lại. Dòng thứ ba in xâu độ dài , trong đó bằng 1 nếu cột thứ bị đảo và bằng 0 nếu ngược lại.
Nếu có nhiều đáp án, in ra đáp án nào cũng được.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 2 1 1 0 1 |
YES 01 11 |
Đảo cả hai cột rồi đảo hàng 2, ma trận trở thành 0 0 / 0 1 và dãy đọc được là 0 0 0 1. Đáp án 00 / 10 cũng hợp lệ và được chấp nhận. |
| 3 4 0 0 0 1 0 0 0 0 1 1 1 1 |
YES 010 0000 |
Chỉ cần đảo hàng 2, không đảo cột nào. Dãy đọc được là 0 0 0 1 1 1 1 1 1 1 1 1. |
| 3 3 0 0 0 1 0 1 1 1 0 |
NO | Với mọi cách chọn tập hàng và tập cột để đảo, luôn còn ít nhất hai hàng không đồng nhất, nên ma trận không bao giờ được sắp xếp. |
Bình luận