Pagini recente » Cod sursa (job #3169719) | Cod sursa (job #2658615) | Cod sursa (job #999994) | Cod sursa (job #2951985) | Cod sursa (job #2195946)
#include <iostream>
#include <fstream>
#define NMAX 16001
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int N,k,a[NMAX],maxim,poz,ans,suma,v[NMAX];
int cautbinar(int st, int dr, int val)
{
for(int i = 1; i <= N; i ++)
a[i]=v[i];
int mij;
int aux=k;
while(aux--)
{
while(st <= dr)
{
mij=(st+dr)/2;
if(a[mij] <= val)
{
poz=mij;
st=mij+1;
}
else dr=mij-1;
}
if(poz==N) return 1;
for(int i =poz+1; i<= N; i++)
{
a[i]-=a[poz];
}
st=poz+1; dr=N;
}
return -1;
}
int main()
{
fin>>N>>k;
for(int i = 1 ; i <= N ; i ++)
{
fin>>a[i];
if(a[i] > maxim)
maxim=a[i];//capacitatea trebuie sa fie >= maximul volumului saltelelor
suma+=a[i];
a[i]+=a[i-1];
v[i]=a[i];
}
for(int j = maxim ; j <= suma; j++)
{
ans=cautbinar(poz,N,j);
if(ans==1)
fout<<j;
}
return 0;
}