Pagini recente » Cod sursa (job #562986) | Cod sursa (job #1367416) | Cod sursa (job #1426685) | Cod sursa (job #710171) | Cod sursa (job #1306188)
#include <fstream>
using namespace std;
#define M 16060
int n,k,c,i, v_sal[M], sm[M] ;
ifstream f1("transport.in");
ofstream f2("transport.out");
int Caut_sm(int st, int dr,int dif, int val_max)
{
if (st==dr) return st;
if (st+1==dr)
if (sm[dr]-dif <= val_max ) return dr;
else return st;
int m=(st+dr)/2;
if (sm[m]-dif <= val_max )
return Caut_sm(m,dr,dif,val_max );
else return Caut_sm(st,m-1,dif,val_max);
}
int Caut_Nr_Ture( int capacitate)
{
int ture=0, p=0;
while (ture<k+1 && p<n )
{
ture++;
p= Caut_sm(p+1,n,sm[p] ,capacitate );
}
return ture;
}
int CautBin(int st, int dr)
{
if (st==dr)
return st;
int m=(st+dr)/2, x= Caut_Nr_Ture(m) ;
if (x<=k ) return CautBin(st,m);
else CautBin(m+1,dr);
}
int main()
{
f1>>n>>k;
for (i=1; i<=n; i++)
f1>>v_sal[i];
for (i=1; i<=n; i++)
sm[i]=sm[i-1]+v_sal[i];
int vmax=v_sal[1];
for (i=2; i<=n; i++)
if (v_sal[i]>vmax ) vmax=v_sal[i];
c=CautBin(vmax,sm[n]);
f2<<c;
f2.close();
return 0;
}