trang chủ / bài tập / sumblocks

Các khối cùng tổng (bản khó)

Đề bài

Mô tả

Cho một dãy số nguyên a1,a2,,an. Một khối (block) là một dãy con gồm các phần tử liên tiếp al,al+1,,ar (với 1lrn), được xác định bởi cặp chỉ số (l,r).

Hãy tìm một tập các khối (l1,r1),(l2,r2),,(lk,rk) thoả mãn:

  • Các khối đôi một rời nhau (không giao nhau): với mọi cặp khối ij, hoặc ri<lj, hoặc rj<li.
  • Tổng các phần tử trong mỗi khối bằng nhau: al1++ar1=al2++ar2==alk++ark.
  • Số khối k lớn nhất có thể.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n: độ dài của dãy.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

  • Dòng đầu in số nguyên k: số khối trong tập tìm được.
  • Trong k dòng tiếp theo, mỗi dòng in hai số nguyên li,ri mô tả một khối.

Có thể in các khối theo thứ tự bất kỳ. Nếu có nhiều đáp án cùng đạt k lớn nhất, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1n1500
  • 105ai105

Ví dụ

Input Output Giải thích
7
4 1 2 2 1 5 3
3
1 2
3 5
6 6
Ba khối (1,2),(3,5),(6,6) rời nhau và cùng có tổng 5: 4+1=2+2+1=5. Không thể chọn được 4 khối cùng tổng và rời nhau.
4
1 1 1 1
4
1 1
2 2
3 3
4 4
Chọn cả bốn phần tử làm bốn khối đơn, mỗi khối có tổng 1.
11
-5 -4 -3 -2 -1 0 1 2 3 4 5
2
1 1
3 4
Hai khối (1,1)(3,4) cùng tổng 5: 5=(3)+(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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0