Cod sursa(job #2064387)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 12 noiembrie 2017 11:57:14
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3 kb
#include <fstream>

using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n,k,m,i,j,sum,c,max1,min1,ok,maxx,l;
int s[16002],x[16002],pi[16002],pj[16002],s1[16002],pi1[16002],pj1[16002];
int main()
{
    f>>n>>k; max1=0; maxx=0;
    if(n%k==0){
        m=0; i=1;
       while(i<=n){
            j=i; sum=0;
            while(j<=n/k+i-1){
                 f>>x[j];  //maxx=max(maxx,x[j]);
                 sum+=x[j]; j++;
            }
            s[++m]=sum;
            max1=max(max1,s[m]);
            pi[m]=i; pj[m]=j-1;
            i=j;
        }
    } else{
      c=n/k; c*=k;
      i=1;
      while(i<=c){
        j=i; sum=0;
        while(j<=n/k+i-1){
             f>>x[j];sum+=x[j];
             maxx=max(maxx,x[j]);j++;
        }
        s[++m]=sum;
        max1=max(max1,s[m]);
        pi[m]=i; pj[m]=j-1;
        i=j;
        }
      for(i=c+1;i<=n;i++){
        f>>x[i]; s[m]+=x[i];
        pj[m]=i; maxx=max(maxx,x[i]);
      }
      max1=max(max1,s[m]);
    }
    for(i=1;i<=m;i++){
        if(s[i]==max1){
            for(j=1;j<=m;j++){
                s1[j]=s[j]; pi1[j]=pi[j]; pj1[j]=pj[j];
            }
            min1=max1;
            //DREAPTA
            if(i>1){
                ok=1; j=i;
                while(ok==1&&j>1){
                    while(s1[j]>s1[j-1]&&pi1[j]!=pj1[j]){
                        s1[j]-=x[pi1[j]];  s1[j-1]+=x[pi1[j]];
                        pj1[j-1]=pi1[j];  pi1[j]++;
                        if(s1[j]>s1[j-1]){ maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx);
                        }
                    }
                    if(s1[j]>s1[j-1]){ ok=0;maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx); }
                      else {maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx);}
                    j--;
                }
            }
            //STANGA
            if(i<m){
                ok=1; j=i;
                s1[i]=s[i];
                pi1[i]=pi[i]; pj1[i]=pj[i];
                while(ok==1&&j<m){
                    while(s1[j]>s1[j+1]&&pi1[j]!=pj1[j]){
                        s1[j]-=x[pj1[j]]; s1[j+1]+=x[pj1[j]];
                        pj1[j]--; pi1[j+1]=pj1[j];
                        if(s1[j]>s1[j+1]){ maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx);}
                    }
                    if(s1[j]>s1[j+1]){ ok=0; maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx); }
                      else { maxx=0;
                        for(l=1;l<=m;l++) maxx=max(maxx,s1[l]);
                        min1=min(min1,maxx); }
                    j++;
                }
            }
        }
    }
    g<<min1<<'\n';
    return 0;
}