Pagini recente » Cod sursa (job #3164796) | Cod sursa (job #2315795) | Cod sursa (job #501737) | Cod sursa (job #2466378) | Cod sursa (job #2446256)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
const int nmax=16000;
const int kmax=16000;
int n,k,total,maxim,saltele[nmax];
int verifica(int c)
{
int cont=0,i=1;
while(i<=n)
{
int sum=0;
while(1)
{
if(sum+saltele[i]<=c)
{sum+=saltele[i];
i++;
}
else break;
}
cont++;
}
if(cont==k)
return 0;
if(cont<k)
return -1;
if(cont>k)
return 1;
}
int cautbin(int st,int dr)
{
int sol=-1,mij,poz;
while(st<=dr)
{mij=st+ (dr-st)/2;
int verif=verifica(mij);
if(verif==0)
{poz=mij;
dr=mij-1;
}
else
{
if(verif==1)
st=mij+1;
else
dr=mij-1;
}
}
return poz;
}
int main()
{f>>n>>k;
int i,j;
for(i=1;i<=n;i++)
{f>>saltele[i];
total+=saltele[i];
if(maxim<saltele[i])
maxim=saltele[i];
}
g<<cautbin(maxim,total);
return 0;
}