Pagini recente » Cod sursa (job #197705) | Cod sursa (job #1448115) | Cod sursa (job #2648702) | Cod sursa (job #13802) | Cod sursa (job #2362015)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
#define MAX 16005
#define INT_MAX 2147483647
ifstream fin("transport.in");
ofstream fout("transport.out");
long long n,k,v[MAX],sum,li,ls,mid,s,ct,mi,cap,i;
bool ok;
int main()
{
fin >> n >> k;
for(i=1;i<=n;i++)
{
fin >> v[i];
sum+=v[i];
if(v[i]>mi)
mi=v[i];
}
// fout << mi << " " << sum << '\n';
li=1;
ls=cap=sum;
while(li<ls)
{
mid=(li+ls)/2;
s=0;
i=1;
ct=0;
ok=1;
// fout << '\n';
while(i<=n && ok)
{
if(v[i]>mid)
li=mid+1, ok=0;
s+=v[i];
// fout << "mid=" << mid << ", v=" << v[i] << ", s=" << s << ", ct=";
if(s==mid)
s=0,ct++;
else if(s>mid)
s=0,ct++,i--;
i++;
// fout << ct << ";" << '\n';
}
if(s)
ct++;
// fout << "v=" << v[i] << ", s=" << s << ", ct=";
// fout << ct << ";" << '\n';
// fout << '\n';
if(ok)
{
if(ct<=k)
{
ls=mid-1;
if(mid<cap)
cap=mid;
}
if(ct>k)
li=mid+1;
// fout << cap << '\n';
// fout << li << " " << ls << '\n';
}
}
fout << cap;
return 0;
}