Ẩn danh

code c++

Cho một dãy số nguyên gồm N phần tử: 𝑎1,𝑎2,…𝑎𝑛. Một đoạn con liên tiếp của dãy A có điểm đầu 𝐿, điểm cuối 𝑅 với (𝐿𝑅) là tập hợp tất cả các phần tử 𝑎𝑖 với (𝐿𝑖𝑅). Đếm số đoạn con có tổng tất cả các phần tử bằng 0.

Dữ liệu: Vào từ tệp SUMSEQ0.INP:

·        Dòng đầu là số tự nhiên n.

·        Dòng thứ 2 là n số nguyên 𝑎1,𝑎2,…𝑎n ( |𝑎𝑖| ≤ 109).

Kết quả: Ghi ra tệp SUMSEQ0.OUT số lượng đoạn con tìm được.

Ví dụ:

SUMSEQ0.INP

SUMSEQ0.OUT

Giải thích

5

2 1 -1 -2 0

4

Có 4 đoạn có tổng bằng 0 là:

[2,3],[1,4],[1,5],[5,5]

Giới hạn:

·        Có 40% số test ứng với 40% số điểm của bài có n ≤ 100;

·        Có 60% số test ứng với 60% số điểm của bài có n≤ 105.

H24
29 tháng 9 lúc 0:15

Bình luận (0)
H24
25 tháng 9 lúc 15:16

using namespace std;

int main()  

ifstream infile("SUMSEQ0.INP"

int n;

infile >> n;

vector a(n);

for (int i = 0; i < n; ++i) { infile >> a[i];

unordered_map prefixSumCount;

long long sum = 0;

int count = 0;

prefixSumCount[0] = 1;

for (int i = 0; i < n; ++i) { sum += a[i];

if (prefixSumCount.find(sum) != prefixSumCount.end()) { count += prefixSumCount[sum];

prefixSumCount[sum]++; }

outfile << count << endl;

infile.close();

outfile.close();

return 0; }

Bình luận (1)

Các câu hỏi tương tự
TP
Xem chi tiết
H24
Xem chi tiết
H24
Xem chi tiết
H24
Xem chi tiết
HC
Xem chi tiết
DN
Xem chi tiết
DT
Xem chi tiết
LC
Xem chi tiết
38
Xem chi tiết
PB
Xem chi tiết