You are on page 1of 2

#include <iostream>

#include <vector>
using namespace std;

int main() {
ios::sync_with_stdio(false); cin.tie(0);
int n; cin >> n;
vector<int> s(n+1);
s[0] = 0;
for (int i=1; i<=n; i++) {
cin >> s[i];
s[i] += s[i-1];
}

vector<bool> f(n+1);
for (int i=n, smin = s[n]; i>0; i--) {
f[i] = s[i-1] < smin;
smin = min(smin, s[i-1]);
}

vector<bool> g(n+1);
for (int i=1, smin = s[n]; i<=n; i++) {
g[i] = s[i-1] < smin;
smin = min(smin, s[i] + s[n]);
}

int count = 0;
for (int i=1; i<=n; i++) count += f[i] && g[i];
cout << count;

return 0;
}

Vị trí j được gọi là vị trí tốt, nếu các điều kiện sau đây được thỏa mãn:
 aj > 0
 aj + aj+1 > 0
 ....
 aj + aj+1 + ... + an > 0
 aj + aj+1 + ... + an + a1 > 0
 ...
 aj + aj+1 + ... + an + a1 + a2 + ... + aj─2 > 0
 aj + aj+1 + ... + an + a1 + a2 + ... + aj─2 + aj─1 > 0
Yêu cầu: hãy đếm số vị trí tốt.

Dữ liệu vào
 Dòng đầu tiên chứa số nguyên n.
 Dòng thứ 2 chứa dãy số a1, a2,...,an.

Kết qủa
In ra 1 số nguyên duy nhất là số vị trí tốt.

Ví dụ
Dữ liệu mẫu
5
0 1 -2 10 3

Kết qủa
2

You might also like