Pagini recente » Cod sursa (job #812527) | Cod sursa (job #625618) | Cod sursa (job #377392) | Cod sursa (job #2027770) | Cod sursa (job #2428078)
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
const int N = 16000 * 16000 + 10;
int v[16001], k, greutate_totala, gr_max, st = 1, dr = N, mij, i;
bool verificare(int c)
{
int x = 0, transporturi = 0;
for(int i = 1; i <= v[0]; ++ i)
{
x += v[i];
if(x > c) transporturi ++, x = v[i];
else if(x == c) transporturi ++, x = 0;
}
if(x != 0) transporturi ++;
if(transporturi <= k) return true;
return false;
}
int main()
{
f >> v[0] >> k;
for(i = 1; i <= v[0]; ++ i)
{
f >> v[i];
greutate_totala += v[i];
gr_max = max(gr_max, v[i]);
}
if(k == 1) g << greutate_totala << "\n";
else if(k >= v[0]) g << gr_max << "\n";
else
{
while(st < dr)
{
mij = (st + dr) / 2;
if(mij >= gr_max && verificare(mij)) dr = mij;
else st = mij + 1;
}
g << dr;
}
return 0;
}