Cod sursa(job #647850)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 decembrie 2011 01:04:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<cstdio>
#define N 16001
int a[N],n,i,k,s[N],x,c,t,j,m,p,r,q;
int main()
{FILE *f=fopen("transport.in","r"),*g=fopen("transport.out","w");
fscanf(f,"%d%d",&n,&k);
for(i=1;i<=n;i++)
       {fscanf(f,"%d",&a[i]),s[i]=s[i-1]+a[i];
       if(m<a[i])
               m=a[i];}
p=m,q=s[n];
if(k>=n)
       {fprintf(g,"%d",m);
       return 0;}
else
       if(k==1)
              {fprintf(g,"%d",s[n]);
              return 0;}
while(p<=q)
       {r=(p+q)/2;
       for(i=1,t=x=0;i<=n;)
       if(s[i]-s[t]<=r)
               i++;
       else
               t=i-1,x++;
       if(s[n]-s[t]<=r)
               x++;
       if(x>k)
               p=r+1;
       else
               q=r-1;}
if(x>k)
       r++;
fprintf(g,"%d",r);
return 0;}