Mai intai trebuie sa te autentifici.
Cod sursa(job #2222659)
| Utilizator | Data | 17 iulie 2018 17:32:25 | |
|---|---|---|---|
| Problema | Transport | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.03 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,a[16000],mx,suma;
void Citire()
{
int i;
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>a[i];
suma += a[i];
mx = max(mx,a[i]);
}
}
int NrDrumuri(int cap)
{
int i,sum,nrd;
i = 1;
sum = nrd = 0;
while(i <= n)
{
if(sum + a[i] <= cap)
{
sum += a[i];
i++;
}
else
{
nrd++;
sum = 0;
}
}
if(sum == 0) return nrd;
return nrd+1;
}
void Rezolvare()
{
int i,st,dr,mij,sol;
st = mx;
dr = suma;
while(st <= dr)
{
mij = st + (dr-st)/2;
if(NrDrumuri(mij) <= k)
{
sol = mij;
dr = mij-1;
}
else st = mij+1;
}
fout<<sol<<"\n";
}
int main()
{
Citire();
Rezolvare();
fin.close();
fout.close();
return 0;
}
