Cod sursa(job #2408132)

Utilizator ZaqueEraqueZaque Eraque ZaqueEraque Data 17 aprilie 2019 17:29:34
Problema Transport Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <algorithm>
#define A 16000
using namespace std;
FILE *f, *g;
int nr[A+1], i, maxi, S, st, dr, mijl, mq, N, K, q;
int trans (int C)
{
    int nrd=1, c=0;
    for (int i=1; i<=N; i++)
    {
        c+=nr[i];
        if (c>C)
        {
            c=nr[i];
            nrd++;
        }
    }
    return nrd;
}
int main ()
{
    f=fopen ("transport.in", "r");
    g=fopen ("transport.out", "w");
    fscanf (f, "%d%d", &N, &K);
    for (i=1; i<=N; i++)
    {
        fscanf (f, "%d", &nr[i]);
        maxi=max (maxi, nr[i]);
        S+=nr[i];
    }
    st=maxi;
    dr=S;
    mijl=(st+dr)>>1;
    while (st<=dr && trans (mijl)!=K)
    {
        q=trans (mijl);
        if (q<K)
        {
            dr=mijl-1;
            mijl=(st+dr)>>1;
        }
        else
        {
            st=mijl+1;
            mijl=(st+dr)>>1;
        }
    }
    if (trans (mijl)==K)
    {
        for (i=mijl-1; i>=1 && trans (i)==K; i--);
        i++;
        fprintf (g, "%d\n", i);
    }
    else
    {
        q=trans (st);
        for (i=st-1; i>=1 && trans (i)==q; i--);
        i++;
        fprintf (g, "%d\n", i);
    }
    fclose (f);
    fclose (g);
    return 0;
}