Cod sursa(job #4412)

Utilizator crusRus Cristian crus Data 3 ianuarie 2007 01:11:18
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define input "transport.in"
#define output "transport.out"
#define nmax 20000
long n,nt,sol,nc,g[nmax],c[nmax],i,s[nmax],maxim=0;
int citire()
{
 FILE *fin;
 fin=fopen(input,"r");
 fscanf(fin,"%d %d",&n,&nt);
 for (i=1;i<=n;i++)
     {
     fscanf(fin,"%d",&c[i]);
     if (c[i]>maxim) maxim=c[i];
     }
 fclose(fin);
 return 0;
}
int afisare()
{
 FILE *fout;
 fout=fopen(output,"w");
 fprintf(fout,"%d",sol);
 fclose(fout);
 return 0;
}
int solve()
{
 long k,ls=maxim,ld=nmax;
 while (ls<=ld)
       {
	k=(ls+ld)/2;
	nc=1;
	g[1]=c[1];
	for (i=2;i<=n;i++)
	    if (k-g[nc]>=c[i]) g[nc]+=c[i];
	       else g[++nc]=c[i];	
	if (nc<=nt) {ld=k-1; sol=k;}
	   else ls=k+1;
       }    
 return 0;
}
int main()
{
 citire();
 solve();
 afisare();
 return 0;
}