Pagini recente » Cod sursa (job #3279881) | Cod sursa (job #2876410) | Cod sursa (job #2256982) | Cod sursa (job #2269674) | Cod sursa (job #2257004)
#include <stdio.h>
int nTrips;
int aSize;
int* ar;
int simulate(int n)
{
int taken = 0, cargo = 0, trip = 0;
while (taken < aSize)
{
if (ar[taken] + cargo <= n)
cargo += ar[taken++];
else
{
if (++trip >= nTrips)
return 0;
cargo = 0;
}
}
return 1;
}
int main()
{
int sum = 0;
freopen("transport.in", "rt", stdin);
freopen("transport.out", "wt", stdout);
scanf("%i%i", &aSize, &nTrips);
ar = malloc(sizeof(int)*aSize);
for(int i=0; i<aSize; i++)
{
scanf("%i", ar+i);
sum += ar[i];
}
int loopVal = sum+1;
int dif = loopVal >> 1;
while (dif > 0)
{
if (simulate(loopVal))
loopVal -= dif;
else
loopVal += dif;
dif>>=1;
}
if (simulate(loopVal-1))
loopVal--; else
if (!simulate(loopVal))
loopVal++;
printf("%i", loopVal);
free(ar);
}