Pagini recente » Cod sursa (job #2236108) | Cod sursa (job #849552) | Cod sursa (job #1465795) | Cod sursa (job #1877920) | Cod sursa (job #2655837)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int v[16001], saltele, transporturi;
int checkTransport (int a) {
int load=0, c=0;
for (int i=1; i<=saltele; i++) {
load += v[i];
if (load > a) {
c++;
i--;
load = 0;
}
else if (load == a) {
c++;
load = 0;
}
}
if (load != 0)
c++;
return c;
}
int main()
{
cin >> saltele >> transporturi;
int maxim=0, sum=0;
for (int i=1; i<=saltele; i++) {
cin >> v[i];
if (v[i] >= maxim)
maxim = v[i];
sum+=v[i];
}
// for (int i=7; i<=1000; i++)
// cout << checkTransport(i) << "|";
/// cautam binar valoarea cea mai din stanga unde nr de transporturi ce tb efectuat este mai mic decat nr max de transporturi
/// ex: daca am 4 3 3 3 2 2 1 1 1 1 1 1 iar val max este 3, atunci se va gasi pozitia 2.
int s = maxim, d=sum, mid, last = -1;
while (s <= d) {
mid = (s + d) / 2;
if (checkTransport(mid) <= transporturi) {
last = mid;
d = mid - 1;
}
else
s = mid + 1;
}
cout << last;
return 0;
}