Pagini recente » Cod sursa (job #2895837) | Borderou de evaluare (job #2116790) | Cod sursa (job #1266718) | Cod sursa (job #93117) | Cod sursa (job #1289133)
#include <fstream>
using namespace std;
ifstream intrare("transport.in");
ofstream iesire("transport.out");
int n, k, i;
int c[16001];
bool verificare(int s)
{
int transporturi = 1; int marfa = 0;
for (i=1; i<=n; ++i)
{
if (marfa + c[i] <= s)
marfa += c[i];
else
{
marfa = 0;
i--;
transporturi++;
}
}
if (transporturi <= k)
return 1;
return 0;
}
int binarySearch (int left, int right, int lastMiddle)
{
if (left > right)
return lastMiddle;
int middle = (left + right) / 2;
if (verificare (middle) == 1)
return binarySearch (left, middle - 1, middle);
else
return binarySearch (middle + 1, right, middle);
}
int main()
{
intrare >> n;
intrare >> k;
if(n > 16000 || k > 16000)
{
return 0;
}
else
{
int suma = 0; int maxx= 0;
for (i=1; i<=n; i++)
{
intrare >> c[i];
suma += c[i];
if (maxx < c[i])
maxx = c[i];
}
iesire << binarySearch (maxx, suma, (maxx + suma) / 2);
return 0;
}
}