Cod sursa(job #1785128)
Utilizator | Data | 20 octombrie 2016 21:35:52 | |
---|---|---|---|
Problema | Transport | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.7 kb |
#include <cstdio>
int x[16010];
int main()
{
FILE *fin,*fout;
int i,s,s1,max1,st,dr,m,nr,k,n;
fin=fopen("transport.in","r");
fout=fopen("transport.out","w");
fscanf(fin,"%d%d", &n, &k);
s1=max1=0;
for (i=1;i<=n;i++) {
fscanf(fin,"%d", &x[i]);
s1+=x[i];
if (x[i]>max1)
max1=x[i];
}
st=max1;
dr=s1;
while (dr>st) {
nr=s=0;
m=(st+dr)/2;
for (i=1;i<=n;i++)
if (x[i]+s<=m)
s+=x[i];
else
s=x[i],nr++;
if (nr<k)
dr=m-1;
else
st=m+1;
}
fprintf(fout,"%d", st);
return 0;
}