#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
long long t[n];
for(int i=0; i<n; i++)
cin>>t[i];
long long sumpref[n];
long long sumsufx[n];
sumpref[0]=t[0];
sumsufx[n-1]=t[n-1];
for(int i=1; i<n; i++)
sumpref[i]=sumpref[i-1]+t[i];
for(int i=n-2; i>=0; i--)
sumsufx[i]=sumsufx[i+1]+t[i];
int wynik=0;
///iteracja po wszystkich krawędziach
bool zlicz[n-1];
fill(zlicz, zlicz+n-1, 0);
for(int i=0; i<n-1; i++){
//cout<<sumpref[i]<<" "<<sumsufx[i+1]<<" "<<i<<"\n";
if(sumpref[i]+sumsufx[i+1]<0){
cout<<"NIE";
return 0;
}
if(sumpref[i]<0 || sumsufx[i+1]<0){
wynik++;
zlicz[i]=1;
// cout<<i<<"\n";
}
}
int odl[n];
fill(odl, odl+n, 1000007);
bool czybyla=false;
int akt;
for(int i=0; i<n; i++){
akt++;
if(t[i]>0){
akt=0;
czybyla=1;
odl[i]=0;
}
if(czybyla){
if(t[i]>0)
akt=0;
odl[i]=akt;
}
}
czybyla=false;
for(int i=n-1; i>=0; i--){
akt++;
if(t[i]>0){
akt=0;
czybyla=1;
odl[i]=0;
}
if(czybyla){
if(t[i]>0)
akt=0;
odl[i]=min(akt, odl[i]);
}
}
for(int i=0; i<n; i++){
if(t[i]<0){
int temporary=0;
if(i>0)
temporary+=zlicz[i-1];
temporary+=zlicz[i];
if(temporary==0 && t[i]<0){
wynik+=odl[i];
}
}
}
cout<<wynik;
}
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 67 68 69 70 71 72 73 74 75 76 77 | #include<iostream> #include<algorithm> using namespace std; int main(){ int n; cin>>n; long long t[n]; for(int i=0; i<n; i++) cin>>t[i]; long long sumpref[n]; long long sumsufx[n]; sumpref[0]=t[0]; sumsufx[n-1]=t[n-1]; for(int i=1; i<n; i++) sumpref[i]=sumpref[i-1]+t[i]; for(int i=n-2; i>=0; i--) sumsufx[i]=sumsufx[i+1]+t[i]; int wynik=0; ///iteracja po wszystkich krawędziach bool zlicz[n-1]; fill(zlicz, zlicz+n-1, 0); for(int i=0; i<n-1; i++){ //cout<<sumpref[i]<<" "<<sumsufx[i+1]<<" "<<i<<"\n"; if(sumpref[i]+sumsufx[i+1]<0){ cout<<"NIE"; return 0; } if(sumpref[i]<0 || sumsufx[i+1]<0){ wynik++; zlicz[i]=1; // cout<<i<<"\n"; } } int odl[n]; fill(odl, odl+n, 1000007); bool czybyla=false; int akt; for(int i=0; i<n; i++){ akt++; if(t[i]>0){ akt=0; czybyla=1; odl[i]=0; } if(czybyla){ if(t[i]>0) akt=0; odl[i]=akt; } } czybyla=false; for(int i=n-1; i>=0; i--){ akt++; if(t[i]>0){ akt=0; czybyla=1; odl[i]=0; } if(czybyla){ if(t[i]>0) akt=0; odl[i]=min(akt, odl[i]); } } for(int i=0; i<n; i++){ if(t[i]<0){ int temporary=0; if(i>0) temporary+=zlicz[i-1]; temporary+=zlicz[i]; if(temporary==0 && t[i]<0){ wynik+=odl[i]; } } } cout<<wynik; } |
English