Cod sursa(job #1665417)
Utilizator | Apostol Daniel ApostolIlieDaniel | Data | 26 martie 2016 22:27:30 |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | c | Status | done |
Runda | Arhiva de probleme | Marime | 0.8 kb |
#include <stdio.h>
#include <stdlib.h>
int v[16000];
int main()
{
FILE *fin,*fout;
int n,k,s,max,i,l1,l2,m,nr;
fin=fopen("transport.in","r");
fout=fopen("transport.out","w");
fscanf(fin,"%d%d",&n,&k);
s=0;
max=0;
for(i=0;i<n;i++)
{
fscanf(fin,"%d",&v[i]);
if(max<v[i])
max=v[i];
s=s+v[i];
}
l1=max;
l2=s;
while(l1<=l2)
{
nr=1;
s=0;
m=(l1+l2)/2;
for(i=0;i<n;i++)
{
s=s+v[i];
if(s>m)
{
nr++;
s=v[i];
}
}
if(nr>k)
l1=m+1;
else
l2=m-1;
}
fprintf(fout,"%d\n",l1);
fclose(fin);
fclose(fout);
return 0;
}