Cod sursa(job #1026767)
| Utilizator | Data | 11 noiembrie 2013 23:02:19 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.88 kb |
#include <fstream>
using namespace std;
ifstream is ("transport.in");
ofstream os ("transport.out");
int n, k, a[16002], maxim, st, dr, mij;
int s, suma, d;
int main()
{
is >> n;
is >> k;
for(int i = 0; i < n; ++i)
{
is >> a[i];
if(a[i] > maxim)
maxim = a[i];
suma += a[i];
}
st = maxim;
dr = suma;
while(st < dr)
{
d = 1;
s = 0;
mij = (st + dr) / 2;
for(int i = 0; i < n; ++i)
{
if( s + a[i] <= mij)
{
s += a[i];
}
else
{
s = a[i];
d++;
}
}
if(d > k)
{
st = mij + 1;
}
else
dr = mij;
}
os << st;
is.close();
os.close();
return 0;
}
