trang chủ / đề bài / hn_hsg9_26_d

Xóa đoạn

Đề bài

Mô tả

Cho dãy số nguyên A gồm N phần tử A1,A2,…,AN và số nguyên S. Bạn có thể xóa đi một đoạn con liên tiếp bất kì trong dãy, tức là chọn hai chỉ số L,R với 1≤L≤R≤N và xóa các phần tử AL,AL+1,…,AR. Quy ước: nếu xóa hết dãy thì tổng còn lại bằng 0.

Yêu cầu: Tìm độ dài nhỏ nhất của đoạn con cần xóa sao cho tổng các phần tử còn lại của dãy không vượt quá S. Nếu không cần xóa đoạn nào (tổng cả dãy đã không vượt quá S) thì kết quả là 0; nếu không có cách xóa nào thỏa mãn thì kết quả là −1.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên dương N.
  • Dòng thứ hai chứa N số nguyên A1,A2,…,AN.
  • Dòng thứ ba chứa số nguyên S.

Dữ liệu ra

In ra một số nguyên là kết quả của bài toán.

Ràng buộc

  • 1≤N≤105.
  • |Ai|≤109.
  • |S|≤1014.

Subtasks

  • 40% số test ứng với 40% số điểm: N≤100, Ai≥0.
  • 20% số test tiếp theo ứng với 20% số điểm: N≤5000, Ai≥0.
  • 20% số test tiếp theo ứng với 20% số điểm: Ai≥0.
  • 20% số test còn lại ứng với 20% số điểm: không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
5
4 -5 4 4 -2
0
2 Xóa đoạn 4,4 (vị trí 3 đến 4), tổng còn lại 4−5−2=−3≤0. Xóa một phần tử bất kì thì tổng còn lại ít nhất là 1.
3
4 2 1
0
3 Phải xóa cả dãy, tổng còn lại bằng 0.
3
1 2 3
-2
-1 Mọi cách xóa đều để lại tổng không âm, lớn hơn −2.
3
1 2 0
5
0 Tổng cả dãy là 3≤5, không cần xóa.

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