Pagini recente » Cod sursa (job #2713458) | Cod sursa (job #404083) | Cod sursa (job #1802767) | Cod sursa (job #376332) | Cod sursa (job #1971661)
#include <fstream>
using namespace std;
int N,K,i,Sum,St,Dr,Mij,A[16001],j,S,Nr,Rez,P[16002];
int cauta (int st,int x)
{
int s=st,d=N,mij;
int r=-1;
while(s<=d)
{
mij=(s+d)/2;
if(P[mij]-P[i-1]<=x)
{
r=mij;
s=mij+1;
}
else
d=mij-1;
}
return r;
}
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
fin>>N>>K;
Sum=0;
for(i=1;i<=N;i++)
{
fin>>A[i];
P[i]=P[i-1]+A[i];
Sum+=A[i];
}//for i
St=1;
Dr=Sum;
while(St<=Dr)
{
Mij=(St+Dr)/2;
i=1;
Nr=0;
while(i<=N)
{ //cauta in vectorul P, incepand cu pozitia i, ultima pozitie <=mij, o intoarce in j
j=cauta(i,Mij);
if(j==-1){ Nr=K+1;break;}
Nr++;
i=j+1;
}//while
if(Nr<=K)
{
Dr=Mij-1;
Rez=Mij;
}
else
St=Mij+1;
}//while
fout<<Rez;
fin.close ();
fout.close();
return 0;
}