Mai intai trebuie sa te autentifici.
Cod sursa(job #2071925)
Utilizator | Data | 21 noiembrie 2017 10:20:06 | |
---|---|---|---|
Problema | Transport | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.89 kb |
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 16000;
ifstream in("transport.in");
ofstream out("transport.out");
int v[NMAX+5];
int main()
{
int n,k,sum=0,Max=-1;
in >> n >> k;
for (int i = 1; i<=n; i++)
{
in >> v[i];
Max = max(Max,v[i]);
sum+=v[i];
}
int st = Max, dr = sum, mj, cnt, mx,Min;
while (st<=dr)
{
mx = -1;
mj = (st+dr)/2;
cnt = 1;
sum = 0;
for (int i = 1; i<=n; i++)
{
if (sum+v[i]>mj)
{
cnt++;
mx = max(mx,sum);
sum = 0;
}
sum+=v[i];
}
if (mx == -1)
mx = sum;
if (cnt>k)
st = mj+1;
else
{
dr = mj-1;
Min = mx;
}
}
out << Min;
}