Cod sursa(job #1849558)

Utilizator bobotheslayerBogdan Zaharia bobotheslayer Data 17 ianuarie 2017 17:54:24
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <cstdio>

int v[16001];

int nrtrans (int c, int n, int max)
{
    int i,transport=0,copiec=0;
    copiec=c;
    if (c<max)
    {
        transport=0;
        return transport;
    }
    for (i=0; i<=n-1; ++i)
    {
        if (c-v[i]==0)
        {
            if (c==copiec)
                ++transport;
            else
            {
                c=c-v[i];
            }
        }
        else
        {
            if (c-v[i]>0)
            {
                if (c==copiec)
                    ++transport;
                c=c-v[i];
            }
            else
            {
                if (c-v[i]<0)
                {
                    c=copiec;
                    ++transport;
                    c=c-v[i];
                }
            }
        }
    }
    return transport;
}

int main()
{
    FILE *intrare,*iesire;
    int n,i,k,st=1,dr=16000,mij=0,max=-1,num=0;
    intrare=fopen("transport.in","r");
    iesire=fopen("transport.out","w");

    fscanf(intrare,"%d%d",&n,&k);
    for (i=0; i<=n-1; ++i)
    {
        fscanf(intrare,"%d",&v[i]);
    }

    for (i=0; i<=n-1; ++i)
    {
        if (v[i]>max)
        {
            max=v[i];
        }
    }
    st=max;
    while (st<dr)
    {
        mij=(st+dr)/2;
        num=nrtrans(mij,n,max);
        if (num>k)
        {
            st=mij+1;
        }
        else
        {
            if (num<=k)
            {
                dr=mij;
            }
        }
    }
    if (nrtrans(st,n,max)==k)
    {
        fprintf(iesire,"%d",st);
    }
    else
    {
        fprintf(iesire,"%d",dr);
    }
}