Pagini recente » Cod sursa (job #1163415) | Cod sursa (job #1425381) | Cod sursa (job #2410496) | Autentificare | Cod sursa (job #2602386)
#include <fstream>
#define nmax 16002
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int saltea[nmax], saltea_maxim = 0;
int numar_saltele, numar_transport;
int sol(int k)
{
int suma = 0, contor = 0;
int i = 1;
while(i <= numar_saltele)
{
suma = 0;
while(suma <= k && i <= numar_saltele)
{
suma += saltea[i];
i++;
}
contor++;
if(i == numar_saltele + 1 && suma <= k)
break;
i--;
}
return (numar_transport >= contor);
}
void solve()
{
int stanga = saltea_maxim, dreapta = 200000;
int solutie;
while(stanga <= dreapta)
{
int mijloc = (stanga + dreapta) / 2;
if(sol(mijloc) == 1)
{
solutie = mijloc;
dreapta = mijloc - 1;
}
else
{
stanga = mijloc + 1;
}
}
fout << solutie;
}
int main()
{
fin >> numar_saltele >> numar_transport;
for(int i = 1; i <= numar_saltele; i++)
{
fin>>saltea[i];
if(saltea_maxim < saltea[i])
saltea_maxim =saltea[i];
}
solve();
return 0;
}