Cod sursa(job #1778968)
| Utilizator | Data | 14 octombrie 2016 16:15:51 | |
|---|---|---|---|
| Problema | Transport | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.05 kb |
#include <iostream>
#include <fstream>
using namespace std;
int v[16061];
int main()
{
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int n,k,sum=0,a;
fin>>n>>k;
for (int i=1;i<=n;++i)
{
fin>>v[i];
sum+=v[i];
}
a=(sum+k-1)/k;
int s=a,d=sum,mij=(d+s)/2;
int volum=0,nr=0;
while (s<=d)
{
nr=0;
sum=0;
mij=(s+d)/2;
for (int i=1;i<=n;++i)
{
sum+=v[i];
if (sum+v[i+1]>mij)
{
nr++;
sum=0;
}
if (i==n)
{
if (sum>mij)
{
nr+=2;
}
else
{
nr++;
}
}
}
if (nr<=k)
{
d=mij-1;
volum=mij;
}
else
{
s=mij+1;
}
}
fout<<volum;
}
