Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Monitorul de evaluare | Atasamentele paginii Profil bugdone | Cod sursa (job #2889913)
#include <iostream>
FILE *fin = fopen("transport.in", "r");
FILE *fout = fopen("transport.out", "w");
int saltele[16005];
int N, K;
bool test(int c)
{
int total = 1;
int taken = 0;
for (int i = 0; i < N; i++)
{
if (taken + saltele[i] > c)
{
taken = saltele[i];
total++;
if (taken > c)
return false;
}
else
taken += saltele[i];
}
return total <= K;
}
int binary_search(int low, int high)
{
if (high == low)
return high;
if (high == low + 1)
{
if (test(high))
return high;
return low;
}
int mid = (high + low) / 2;
if (test(mid))
return binary_search(low, mid);
return binary_search(mid, high);
}
int main()
{
fscanf(fin, "%d %d", &N, &K);
for (int i = 0; i < N; i++)
fscanf(fin, "%d", &saltele[i]);
fprintf(fout, "%d", binary_search(1, N * 16000));
}