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