trang chủ / đề bài / voi21_rmat

Rút gọn ma trận

Đề bài

Mô tả

Xét ma trận A gồm m hàng và n cột, các hàng được đánh chỉ số từ 1 đến m theo thứ tự từ trên xuống dưới, các cột được đánh chỉ số từ 1 đến n theo thứ tự từ trái sang phải. Kí hiệu A(i,j) là giá trị của phần tử nằm giao giữa hàng i và cột j (1≤i≤m; 1≤j≤n).

Có hai thao tác rút gọn ma trận theo hàng và cột.

Thao tác rút gọn theo hàng: chọn hai hàng i và i+1 (1≤i<m) mà tổng các phần tử trên hàng i bằng tổng các phần tử trên hàng i+1, việc rút gọn hàng i và i+1 theo các bước sau:

  • Bước 1: Thay đổi giá trị các phần tử trên hàng i: A(i,j)=A(i,j)+A(i+1,j) với 1≤j≤n;
  • Bước 2: Xóa hàng i+1 khỏi ma trận, khi đó số hàng của ma trận giảm đi một và các hàng được đánh chỉ số lại bắt đầu từ 1 từ trên xuống dưới.

Thao tác rút gọn theo cột: chọn hai cột j và j+1 (1≤j<n) mà tổng các phần tử trên cột j bằng tổng các phần tử trên cột j+1, việc rút gọn cột j và j+1 theo các bước sau:

  • Bước 1: Thay đổi giá trị các phần tử trên cột j: A(i,j)=A(i,j)+A(i,j+1) với 1≤i≤m;
  • Bước 2: Xóa cột j+1 khỏi ma trận, khi đó số cột của ma trận giảm đi một và các cột được đánh chỉ số lại bắt đầu từ 1 từ trái sang phải.

Yêu cầu: Cho ma trận A, hãy tìm một dãy các thao tác rút gọn để nhận được ma trận có số lượng phần tử là ít nhất.

Dữ liệu vào

  • Dòng đầu tiên chứa 2 số nguyên dương m và n là số hàng và số cột của ma trận;
  • Dòng thứ i (1≤i≤m) trong số m dòng tiếp theo chứa n số nguyên, mỗi số có giá trị tuyệt đối không vượt quá 106, số thứ j (1≤j≤n) là giá trị A(i,j).

Các số trên cùng một dòng cách nhau bởi dấu cách.

Dữ liệu ra

In ra một số nguyên duy nhất là số lượng phần tử còn lại trong phương án thực hiện dãy các thao tác rút gọn tìm được.

Ràng buộc

  • m×n≤106.
  • |A(i,j)|≤106.

Subtasks

  • Subtask 1 (30% số điểm): m=1 và n≤10.
  • Subtask 2 (20% số điểm): m=1 và n≤100.
  • Subtask 3 (30% số điểm): m×n≤500.
  • Subtask 4 (10% số điểm): m×n≤5000.
  • Subtask 5 (10% số điểm): m×n≤106.

Ví dụ

Input Output Giải thích
3 5
1 2 3 4 5
5 4 3 2 1
4 -1 -1 -1 2
6 Rút gọn hàng 1 và hàng 2 được hai hàng 6 6 6 6 6 và 4 −1 −1 −1 2. Rút gọn cột 2 và cột 3 được 6 12 6 6 và 4 −2 −1 2. Rút gọn cột 1 và cột 2 được 18 6 6 và 2 −1 2. Không thực hiện được thêm thao tác rút gọn; ma trận còn 6 phần tử.
1 5
4 2 2 4 8
2 Ví dụ thêm (không có trong đề gốc). Rút gọn cột 2,3: 4 4 4 8; rút gọn cột 2,3: 4 8 8; rút gọn cột 2,3: 4 16. Nếu ở bước thứ hai rút gọn cột 1,2 thì được 8 4 8 và không rút gọn tiếp được.

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