Cod sursa(job #131369)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 3 februarie 2008 18:08:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>

FILE*f=fopen("transport.in","r");
FILE*g=fopen("transport.out","w");

long n,i,max,su,k,salt[16001],rasp,cap;

unsigned char ok(long cap)
{
 long s=0,ind=1;
 for (i=1; i<=n-1; i++)
   if (salt[i]+s<=cap) s+=salt[i];
     else { s=salt[i]; ind++; }
 if (s+salt[n]>cap)  ind++;
 if (ind<=k) return 1;
        else return 0;
}

int main()
{
 fscanf(f,"%ld %ld",&n,&k);
 max=0; su=0;
 for (i=1; i<=n; i++)
   {
    fscanf(f,"%ld",&salt[i]);
    if (salt[i]>max) max=salt[i];
    su+=salt[i];
   }
 if (k>n) fprintf(g,"%ld",max);
   else 
     {
      while (max<=su)
        {
         cap=(max+su)/2;
         if (ok(cap)==1) { rasp=cap; su=cap-1; }
           else  max=cap+1;
        }
      fprintf(g,"%ld",rasp);
     }
 return 0;
}