Bỏ qua đến nội dung
Kho đề HSG Tin 9Đề thi cấp tỉnh/thành phố

Bài 4 · Lập trình

Chia dãy

Điểm
4 điểm
Tên chương trình
CHIADAY.*
Vào / Ra
CHIADAY.INP → CHIADAY.OUT

Đề bài

Cho dãy số AA gồm nn số nguyên a1,a2,…,ana_1, a_2, \dots, a_n, có thể chia dãy số này thành các đoạn liên tiếp sao cho tổng các số trong mỗi đoạn là lũy thừa cơ số 2.

Ví dụ: dãy gồm 6 số A={5,3,1,1,1,3}A = \{5, 3, 1, 1, 1, 3\} có 2 cách chia thỏa mãn:

  • Cách 1: Chia 3 đoạn {5,3}; {1,1}; {1,3} có tổng lần lượt là: 8=23;2=21;4=228 = 2^3; 2 = 2^1; 4 = 2^2.
  • Cách 2: Chia 4 đoạn {5,3}; {1}; {1}; {1,3} có tổng lần lượt là 8=23;1=20;1=20;4=228 = 2^3; 1 = 2^0; 1 = 2^0; 4 = 2^2.

Yêu cầu: Em hãy viết chương trình tìm cách chia dãy AA trên thành các đoạn con liên tiếp sao cho số lượng đoạn con là ít nhất và tổng các số trong mỗi đoạn là lũy thừa cơ số 2?

Dữ liệu vàoCHIADAY.INP

Trong tệp văn bản CHIADAY.INP gồm:

  • Dòng 1 là số nguyên dương nn (1≤n≤105)(1 \le n \le 10^5);
  • Dòng 2 gồm nn số nguyên a1,a2,…,ana_1, a_2, \dots, a_n (0≤ai≤2×104;1≤i≤n)(0 \le a_i \le 2 \times 10^4; 1 \le i \le n);

Kết quả raCHIADAY.OUT

Đưa ra tệp văn bản CHIADAY.OUT một số nguyên là số đoạn ít nhất chia được. Nếu không chia được thì in ra -1.

Ràng buộc

  • Subtask 1: 25% số test có tổng tất cả các số trong dãy AA là một lũy thừa cơ số 2;
  • Subtask 2: 25% số test có n≤3n \le 3;
  • Subtask 3: 25% số test có n≤5000n \le 5000;
  • Subtask 4: 25% số test không có ràng buộc gì thêm.

Ví dụ

Dữ liệu vàoCHIADAY.INP
6
5 3 1 1 1 3
Kết quả raCHIADAY.OUT
3

Thuộc đề thi

Kỳ thi chọn học sinh giỏi THCS cấp tỉnh năm học 2025 – 2026 — Môn: Tin học – Lớp 9

Ninh Bình · Cấp tỉnh · Năm học 2025-2026