trang chủ / đề bài / arrsplit42

Chia mảng thành các đoạn khác không

Đề bài

Mô tả

Cho một dãy A gồm n số nguyên. Bạn cần chia dãy A thành một số đoạn liên tiếp (có thể chỉ một đoạn) sao cho:

  • Mỗi đoạn có tổng các phần tử khác 0.
  • Ghép các đoạn lần lượt lại theo thứ tự thì thu được đúng dãy A ban đầu.

Hãy tìm một cách chia thỏa mãn, hoặc cho biết không tồn tại cách chia nào.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n: số phần tử của dãy A.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an: các phần tử của dãy.

Dữ liệu ra

  • Nếu không tồn tại cách chia thỏa mãn, in ra một dòng chứa NO.
  • Ngược lại, dòng đầu in ra YES. Dòng thứ hai in ra số nguyên k: số đoạn được chia. Trong k dòng tiếp theo, mỗi dòng in ra hai số nguyên li và ri tương ứng với đoạn con A[li…ri] là đoạn thứ i. Các giá trị li,ri phải thỏa mãn:
    • l1=1
    • rk=n
    • li+1=ri+1 với mọi 1≤i<k.

Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1≤n≤100
  • −103≤ai≤103

Ví dụ

Input Output Giải thích
3
1 2 -3
YES
2
1 1
2 3
Cả dãy có tổng 0 nên không thể để nguyên một đoạn. Chia thành [1] (tổng 1) và [2,−3] (tổng −1), cả hai đều khác 0.
1
0
NO Đoạn duy nhất khả dĩ có tổng 0, không có cách chia nào hợp lệ.
4
1 2 3 -5
YES
1
1 4
Tổng cả dãy là 1≠0, nên để nguyên toàn bộ dãy làm một đoạn là hợp lệ.
3
0 0 0
NO Mọi đoạn con đều có tổng 0.

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