Pagini recente » Cod sursa (job #156386) | Cod sursa (job #1724102) | Clasamentul arhivei de probleme | Cod sursa (job #303070) | Cod sursa (job #1523555)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
long long int v[16003],n,k,maxi = 0;
long long int noftt(long long int c)
{
long long int i = 0, cur = 0, noft = 0;
while( i < n)
{
if (cur+v[i] <= c)
cur +=v[i];
else
{
cur = v[i];
noft++;
}
i++;
}
if( cur!=0)
noft++;
return k-noft;
}
long long int found(int mij)
{
while (noftt(mij-1)>=0)
mij--;
return mij;
}
long long int BS(long long int st , long long int dr)
{
if( st<=dr)
{
long long int mij = (st+dr)/2;
if ( maxi <= mij)
{
long long int n_o_t = noftt(mij);
if (n_o_t == 0)
return found(mij);
else
if( n_o_t> 0)
return BS(st,mij-1);
else
return BS(mij+1,dr);
}
else
return BS(mij+1,dr);
}
}
int main()
{
in >> n >> k;
for(long long int i = 0 ; i < n ; i++)
{
in >>v[i];
if (v[i]> maxi)
maxi = v[i];
}
long long int result = BS(1,k*16000);
out<< result;
return 0;
}