Pagini recente » Cod sursa (job #1639281) | Cod sursa (job #2485965) | Cod sursa (job #3290314) | Cod sursa (job #421829) | Cod sursa (job #3039372)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[16000 + 5], k, n;
bool verif( int mij )
{
int i, s = 0, nr = 0;
// cout << "mij este " << mij << endl;
for ( i = 1; i <= n; ++i )
{
s = 0;
++nr;
// cout << "incepe pe indicele " << i << " ";
while ( i <= n && s <= mij )
{
s += v[i];
++i;
}
if ( i > n )
{
if ( s > mij )
++nr;
break;
}
--i;
s -= v[i];
//cout << "indicele este " << i - 1 << " si suma este " << s << endl;
--i;
}
// if (mij == 7)
// cout << nr << endl;
// cout << "nr este " << nr << endl;
// cout << "-------------------------" << endl;
if ( nr <= k )
return true;
return false;
}
int main()
{
int i, j;
fin >> n >> k;
int st = -1, dr = 0;
for ( i = 1; i <= n; ++i )
{
fin >> v[i];
st = max(st, v[i]);
dr += v[i];
}
long long mij, sol = -1;
while ( st <= dr )
{
mij = ( st + dr)/ 2;
if ( verif(mij) == true )
{
sol = mij;
dr = mij - 1;
}
else
st = mij + 1;
// cout << st << " " << dr << endl;
}
fout << sol << endl;
/// cout << verif(7);
return 0;
}