//Stanislaw Fielder
#include <iostream>
#include <algorithm>
#include <climits>
using namespace std;
struct miasto{
int moc;
int odl;
};
int odl = 0, ilosc = 0, m;
miasto miasta[500010] {};
int dp(int i, long long int moc){
if(i == ilosc-1){
if(moc >= 0){
return 0;
}
else{
return 1000000010;
}
}
else{
if(moc >= 0){
return min(dp(i+1, moc+miasta[i+1].moc)+miasta[i+1].odl, dp(i+1, miasta[i+1].moc));
}
else{
return dp(i+1, moc+miasta[i+1].moc)+miasta[i+1].odl;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int p;
cin >> p;
long long int balans = 0;
for(int i = 0; i < p; i++){
int a;
cin >> a;
if(a != 0){
m = max(m, a);
balans += a;
miasta[ilosc].moc = a;
miasta[ilosc].odl = odl;
odl = 0;
ilosc++;
}
odl++;
}
if(balans >= 0)
if(ilosc > 0)
cout << dp(0, miasta[0].moc) << endl;
else
cout << 0;
else
cout << -1;
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 54 55 56 57 58 59 60 61 62 63 64 65 66 | //Stanislaw Fielder #include <iostream> #include <algorithm> #include <climits> using namespace std; struct miasto{ int moc; int odl; }; int odl = 0, ilosc = 0, m; miasto miasta[500010] {}; int dp(int i, long long int moc){ if(i == ilosc-1){ if(moc >= 0){ return 0; } else{ return 1000000010; } } else{ if(moc >= 0){ return min(dp(i+1, moc+miasta[i+1].moc)+miasta[i+1].odl, dp(i+1, miasta[i+1].moc)); } else{ return dp(i+1, moc+miasta[i+1].moc)+miasta[i+1].odl; } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int p; cin >> p; long long int balans = 0; for(int i = 0; i < p; i++){ int a; cin >> a; if(a != 0){ m = max(m, a); balans += a; miasta[ilosc].moc = a; miasta[ilosc].odl = odl; odl = 0; ilosc++; } odl++; } if(balans >= 0) if(ilosc > 0) cout << dp(0, miasta[0].moc) << endl; else cout << 0; else cout << -1; return 0; } |
English