trang chủ / đề bài / ptnk_ts10_22_dowry

Chia gia tài

Đề bài

Mô tả

Do tuổi đã cao, Phú Ông quyết định chia toàn bộ ruộng đất của mình cho 3 người con. Đất của Phú Ông là một hình chữ nhật khá rộng lớn.

Bằng n+1 đường rào ngang và m+1 đường rào dọc song song, Phú Ông ngăn đất thành n dòng, m cột. Mảnh đất giới hạn bởi các đường rào ngang và dọc gọi là lô đất, như vậy Phú Ông có n×m lô đất. Lô đất ở dòng i, cột j có giá trị aij (giá trị có thể âm).

Để chia đất cho 3 người con, ban đầu ông tách đất thành 2 miếng rời nhau bằng 1 đường rào ngang hoặc rào dọc. Miếng đất thứ nhất được chia cho người con đầu. Với miếng đất thứ hai, ông cũng tách thành 2 miếng rời nhau bằng 1 đường rào ngang hoặc rào dọc trên miếng đất này và chia cho 2 người còn lại. Kết quả là mỗi người con nhận được 1 miếng đất có dạng hình chữ nhật (số lô đất trong mỗi miếng có thể khác nhau, nhưng mỗi miếng có ít nhất một lô đất). Miếng đất thứ nhất (của người con đầu) có thể là bất kỳ miếng nào trong hai miếng tách ra ở lần đầu. Để công bằng, Phú Ông muốn các miếng đất phải có giá trị bằng nhau. Giá trị của miếng đất bằng tổng giá trị tất cả lô đất thuộc miếng đất đó.

Yêu cầu: Hãy giúp Phú Ông tìm một cách chia thỏa mong muốn hoặc thông báo không thể thực hiện.

Dữ liệu vào

  • Dòng đầu tiên chứa 2 số nguyên n và m.
  • Dòng thứ i trong n dòng sau chứa m số nguyên ai1,ai2,…,aim: giá trị của m lô đất tương ứng trên dòng i.

Dữ liệu ra

  • Dòng đầu tiên ghi thông báo YES nếu tìm được một cách chia, ngược lại ghi thông báo NO.
  • Trường hợp tìm được một cách chia thì 2 dòng tiếp theo chứa mô tả đường tách thứ nhất và thứ hai tương ứng. Mỗi đường tách được mô tả theo dạng c i, trong đó c∈{N,D} cho biết đường tách là ngang (N) hay dọc (D), và i là chỉ số dòng (hoặc cột) nằm ngay phía trên (hoặc ngay bên trái) đường tách: N i là đường rào ngang nằm giữa dòng i và dòng i+1, D i là đường rào dọc nằm giữa cột i và cột i+1. Dòng và cột được đánh số bắt đầu từ 1 theo toàn bộ mảnh đất ban đầu (kể cả với đường tách thứ hai).
  • Đường tách thứ hai phải nằm hẳn bên trong một trong hai miếng tạo ra bởi đường tách thứ nhất. Nếu có nhiều cách chia, in ra một cách bất kỳ.

Ràng buộc

  • 1≤n,m≤1000.
  • 1≤|aij|≤106 (mọi giá trị khác 0 và có thể âm).

Ví dụ

Input Output Giải thích
3 4
3 8 1 -6
2 -3 2 2
-1 8 1 1
YES
N 1
D 2
Đường ngang dưới dòng 1 tách ra dòng 1 (giá trị 3+8+1−6=6). Miếng còn lại (dòng 2, 3) được tách bởi đường dọc sau cột 2 thành hai miếng giá trị 2−3−1+8=6 và 2+2+1+1=6.
2 2
-8 6
10 -3
NO Không có cách thực hiện.
3 1
1
1
1
YES
N 1
N 2
Ví dụ bổ sung so với đề gốc: đường tách thứ hai nằm giữa dòng 2 và dòng 3 của mảnh đất ban đầu nên ghi N 2 (không đánh số lại trong miếng đất thứ hai).
2 2
2 1
2 1
YES
D 1
N 1
Ví dụ bổ sung so với đề gốc: người con đầu nhận cột 2 (giá trị 2), cột 1 được tách bởi đường ngang giữa dòng 1 và dòng 2 thành hai lô giá trị 2.

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0