#include <bits/stdc++.h>
using namespace std;
int dane[500002], indeks[500002];
long long preprawo[500002], prelewo[500002];
int main() {
ios_base::sync_with_stdio(0);
int n, i, j = 1, w, wyn = 0,m,wyn2;
long long s = 0;
cin >> n;
for(i = 1; i <= n; i++){
cin >> w;
if(w != 0) {
dane[j] = w;
indeks[j] = i;
j++;
}
}
m = j - 1;
for(i = m; i > 0; i--){
preprawo[i] = preprawo[i+1] + dane[i];
}
if (preprawo[1] < 0){
cout << -1;
return 0;
}
wyn = wyn2 = indeks[m] - indeks[1];
//idac w prawo
for(i = 1; i < m; i++){
s = s + dane[i];
if(s >= 0 && s <= preprawo[i])//jezeli mozna usunac krawedz
{
wyn = wyn - (indeks[i+1] - indeks[i]);//usun ja i odejmij od sumy krawedzi
s = 0;
}
}
for(i = 1; i <= m; i++) {
prelewo[i] = prelewo[i-1] + dane[i];
}
//idac w lewo
s = 0;
for(i = m; i > 1; i--){
s = s + dane[i];
if(s >= 0 && s <= prelewo[i-1])//jezeli mozna usunac krawedz
{
wyn2 = wyn2 - (indeks[i] - indeks[i-1]);//usun ja i odejmij od sumy krawedzi
s = 0;
}
}
//cout << wyn <<" "<<wyn2<<endl;
cout << min(wyn,wyn2);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <bits/stdc++.h> using namespace std; int dane[500002], indeks[500002]; long long preprawo[500002], prelewo[500002]; int main() { ios_base::sync_with_stdio(0); int n, i, j = 1, w, wyn = 0,m,wyn2; long long s = 0; cin >> n; for(i = 1; i <= n; i++){ cin >> w; if(w != 0) { dane[j] = w; indeks[j] = i; j++; } } m = j - 1; for(i = m; i > 0; i--){ preprawo[i] = preprawo[i+1] + dane[i]; } if (preprawo[1] < 0){ cout << -1; return 0; } wyn = wyn2 = indeks[m] - indeks[1]; //idac w prawo for(i = 1; i < m; i++){ s = s + dane[i]; if(s >= 0 && s <= preprawo[i])//jezeli mozna usunac krawedz { wyn = wyn - (indeks[i+1] - indeks[i]);//usun ja i odejmij od sumy krawedzi s = 0; } } for(i = 1; i <= m; i++) { prelewo[i] = prelewo[i-1] + dane[i]; } //idac w lewo s = 0; for(i = m; i > 1; i--){ s = s + dane[i]; if(s >= 0 && s <= prelewo[i-1])//jezeli mozna usunac krawedz { wyn2 = wyn2 - (indeks[i] - indeks[i-1]);//usun ja i odejmij od sumy krawedzi s = 0; } } //cout << wyn <<" "<<wyn2<<endl; cout << min(wyn,wyn2); return 0; } |
English