Cod sursa(job #2437361)
Utilizator | Data | 9 iulie 2019 13:30:41 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.08 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[16001];
int posib=0,n,k;
int verif(int mij)
{
posib=0;
int kk=0;
for(int i=1;i<=n;i++)
{
if(v[i]>mij){
posib=k+1;
return 0;
}
else
{
if(kk+v[i]>mij){
posib++;
if(v[i]<=mij)
kk=v[i];
else
{
posib=k+1;
return 0;
}
}
else
kk+=v[i];
if(posib>k)
return 0;
}
}
posib++;
return (posib<=k);
}
int main()
{
int c,i,j,suma=0,st=1,dr,last,minim=0,mij;
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
dr=16000*16000;
last=(st+dr)/2;
while(st<dr)
{
mij=(st+dr)/2;
if(verif(mij)==1)
dr=mij;
else
st=mij+1;
}
fout<<st;
return 0;
}