Cod sursa(job #2510074)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 15 decembrie 2019 18:52:52
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#define NMAX 16000
using namespace std;

int n,k;
int v[NMAX+3],maxim;
FILE *fin,*fout;

int c_binar(int st,int dr,int val)
{
    int raspuns=st;
    int s_stanga=v[st-1];
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]-s_stanga>val)
        {
            //caut in stanga intervalului
            dr=mij-1;
        }
        else if(v[mij]-s_stanga<val)
        {
            st=mij+1;
            raspuns=mij;
        }
        else if(v[mij]-s_stanga==val)
        {
            raspuns=mij;
            return raspuns;
        }
    }
    return raspuns;
}

void caut(int val,int &ok)
{
    //incerc sa caut binar elementele
    int st=1;
    for(int incercari=1; incercari<=k; incercari++)
    {
        st=c_binar(st,n,val)+1;
        if(st>=n)
        {
            //am gasit valoarea minima de care avem nevoie
            ok=1;
        }
    }

}

int main()
{
    fin=fopen("transport.in","r");
    fout=fopen("transport.out","w");

    fscanf(fin,"%d %d",&n,&k);
    for(int i=1; i<=n; i++)
    {
        int x;
        fscanf(fin,"%d",&x);
        if(x>maxim)
        {
            maxim=x;
        }
        v[i]=v[i-1]+x;
    }
    int ok=0;
    //consider ca nu am gasit val minima
    int val=maxim;
    while(ok==0)
    {
        caut(val,ok);
        val++;
    }
    fprintf(fout,"%d",val);
    return 0;
}