Pagini recente » Cod sursa (job #1057431) | Cod sursa (job #721385) | Cod sursa (job #1241552) | Cod sursa (job #1713305) | Cod sursa (job #1523567)
#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;
}
int BS2(int st, int dr)
{
if(st <= dr)
{
int mij = (st+dr)/2;
if( noftt(mij)>=0)
BS2(st,mij-1);
else
BS2(mij+1,dr);
}
}
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 BS2(maxi,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(maxi,n*16000);
//result = BS2(maxi, maxi * (n+1)/k);
out<< result;
return 0;
}