Cod sursa(job #2174776)
Utilizator | Data | 16 martie 2018 13:25:55 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.57 kb |
#include <fstream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int v[16001];
int main()
{
int n,k,i,ma=0,s=0,st,dr,m=0,k1,kk,cnt=0;
in>>n>>k;
for(i=1;i<=n;i++)
{
in>>v[i];
if(v[i]>ma)
ma=v[i];
s+=v[i];
}
st=ma;dr=s;
int elem=0;
while(st<=dr)
{
m=(st+dr)/2;
cnt=1;
kk=0;
for(i=1;i<=n;i++)
{
if(kk+v[i]<=m)
kk+=v[i];
else
{
cnt++;
kk=v[i];
}
}
if(cnt>k)
st=m+1;
else
{
elem=m;
dr=m-1;
}
}
out<<elem;
return 0;
}