#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; } |