Pagini recente » Cod sursa (job #1716048) | Cod sursa (job #1274819) | Cod sursa (job #21038) | Cod sursa (job #2165044) | Cod sursa (job #1937679)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int V[16001];
int Nrtransporturi(int k,int V[16001],int c,int n);
int Cautarebinara(int max,int s,int k,int n)
{int s1=max,d1=s,m,ok=0,l;
while(s1<=d1&&ok==0)
{
m=s1+(d1-s1)/2;
l=Nrtransporturi(k,V,m,n);
if(l==1)
{ m=m-1;
l=Nrtransporturi(k,V,m,n);
while(l==1)
{
m--;
l=Nrtransporturi(k,V,m,n);
}
m++; return m;
}
else {if(l==0)
d1=m-1;
if(l==2)
s1=m+1;}
}
}
int Nrtransporturi(int k,int V[16001],int c,int n)
{int i, nr=0,ok,s;
i=0;
while(i<n)
{s=0;
do{i++;
s=s+V[i];
}
while(s<=c&&i<=n);
//if(s>c)
i--;
nr++;
}
if(nr==k)
ok=1;
if(nr>k)
ok=2;
if(nr<k)
ok=0;
return ok;
}
int main()
{int n,i,k,max=-1,s=0;
f>>n>>k;
for(i=1;i<=n;i++)
{f>>V[i];
s=s+V[i];
if(max<V[i])
max=V[i];}
g<<Cautarebinara(max,s,k,n);
f.close();
g.close();
return 0;
}