Cod sursa(job #489973)
| Utilizator | Data | 4 octombrie 2010 12:48:40 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.63 kb |
#include <stdio.h>
FILE *f,*g;
int n,k,min,max=0,s=0,c[16001];
int main(){
int i;
f=fopen("transport.in","r");
g=fopen("transport.out","w");
fscanf(f,"%d %d\n",&n,&k);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&c[i]);
if(c[i]>max) {max=c[i];}
s+=c[i];
}
min=max; max=s;
int m,cm,cb,nr;
while(min<=max)
{
m=(min+max)/2;
nr=0;cm=m;
for(i=1;i<=n;)
{ nr++;
while(c[i]<=cm&&i<=n)
{
cm=cm-c[i];
i++;
}
cm=m;
}
if(nr<=k)
{
cb=m;
max=m-1;
}
else
min=m+1;
}
fprintf(g,"%d",cb);
return 0;
}
