Cho em hỏi sao cách làm của em ko AC v ạ
5/10 test
Tóm tắt đề:
Cho mảng A, tìm đoạn con liên tiếp dài nhất có trung bình cộng = k
- in ra vị trí bắt đầu của đoạn con (nếu có nhiều đoạn con thì in ra vị trí nhỏ nhất)
- in ra số lượng phần tử của đoạn con
Idea làm bài này của em là
Trừ đi các phần tử trong mảng 1 lượng là K
Thì em nghĩ bài toán lúc này sẽ là tìm đoạn con có tổng = 0 dài nhất
Em sử dụng prefixSum và map để tìm ra đoạn con có tổng = 0 dài nhất
Đây là code của em ạ:
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n);
unordered_map<int, int> b;
int prefixSum = 0, start = n + 1, max_length = 0;
for (int i = 0; i < n; ++i) {
cin >> a[i];
a[i] -= k;
prefixSum += a[i];
if (prefixSum == 0) {
start = 1;
max_length = max(max_length, i + 1);
}
else if (b.count(prefixSum) && i - b[prefixSum] >= max_length) {
start = min(start, b[prefixSum] + 2);
max_length = i - b[prefixSum];
} else {
b[prefixSum] = i;
}
}
if (max_length > 0)
cout << start << '\n' << max_length << '\n';
else
cout << 0 << '\n';
}