Mai intai trebuie sa te autentifici.
Cod sursa(job #979302)
Utilizator | Data | 1 august 2013 11:00:40 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.9 kb |
#include <cstdio>
int p,u,mid,n,k,v[16001],c,maxim,s,i,j;
FILE *f,*g;
int poate(int c) {
//testez daca cu un camion de capacitate c pot face maxim k transp
int ok=1,d=c,nt=0;
i=n;
while(i>=1){
if(d>=v[i]){
d-=v[i];
i--;
}
else{
d=c-v[i];
nt++;
i--;
}
}
nt++;
return nt<=k;
}
int main() {
f=fopen("transport.in","r");
g=fopen("transport.out","w");
fscanf(f,"%d%d",&n,&k);
s=0;
maxim=0;
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
s+=v[i];
if(v[i]>maxim){
maxim=v[i];
}
}
p=maxim;
u=s;
while(p<=u){
mid=(p+u)/2;
if(poate(mid)==1)
u=mid-1;
else
p=mid+1;
}
fprintf(g,"%d",p);
fclose(f);
fclose(g);
return 0;
}