Cod sursa(job #1071272)
Utilizator | Data | 2 ianuarie 2014 20:39:49 | |
---|---|---|---|
Problema | Transport | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.55 kb |
#include <fstream>
using namespace std;
int main()
{
int n, k, max = 0, sum = 0, i, st, dr, a[16007], nr, mij;
ifstream f("transport.in");
ofstream g("transport.out");
f >> n >> k;
for (i = 1; i <= n; i++)
{
f >> a[i];
if (a[i] > max)max = a[i];
sum += a[i];
}
st = max;
dr = sum;
while (st <= dr)
{
mij = (st + dr) / 2;
nr = 1;
sum = 0;
for (i = 1; i <= n;++i)
if (sum + a[i] <= mij)sum += a[i];
else sum = a[i], ++nr;
if (k < nr) st = mij + 1;
else dr = mij-1;
}
g << mij;
return 0;
}