Pagini recente » Cod sursa (job #2784146) | Cod sursa (job #2951415) | Cod sursa (job #1632484) | Cod sursa (job #543282) | Cod sursa (job #979836)
Cod sursa(job #979836)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 16005
int v[Nmax];
int N, K, S, MAX;
bool valid( int cap )
{
int transport = 0;
for ( int i = 1; i <= N; )
{
transport++;
int j = i, s = 0;
while( s+v[j] <= cap && j <= N )
s += v[j],
j++;
i = j;
}
return ( transport <= K );
}
void read()
{
ifstream f("transport.in");
f >> N >> K;
string FileData( ( istreambuf_iterator<char>(f)), istreambuf_iterator<char>() );
int l = FileData.length();
int nr = 0, ind = 1;
for ( int i = 1; i < l; ++i )
if ( isdigit( FileData[i] ) )
nr = nr * 10 + ( FileData[i] - 48 );
else
{
v[ ind++ ] = nr;
MAX = max( MAX, nr );
S += nr;
nr = 0;
}
f.close();
}
int cautare_binara( int st, int dr )
{
int m;
while( dr - st > 1 )
{
m = st + ( dr - st ) / 2;
if ( valid(m) )
dr = m;
else
st = m + 1;
}
if ( valid(st) )
return st;
if ( valid(dr) )
return dr;
return -1;
}
void print()
{
ofstream g("transport.out");
g << cautare_binara( MAX, S ) << "\n";
g.close();
}
int main()
{
read();
print();
return 0;
}