Cod sursa(job #2195946)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 17 aprilie 2018 20:55:40
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#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;
}