Cod sursa(job #2408159)

Utilizator ZaqueEraqueZaque Eraque ZaqueEraque Data 17 aprilie 2019 17:51:21
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 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, poz;
bool trans (int C)
{
    int nrd=0, c;
    for (int i=1; i<=N; i++)
    {
        c=nr[i];
        i++;
        while (c+nr[i]<=C && i<=N)
        {
            c+=nr[i];
            i++;
        }
        i--;
        nrd++;
    }
    return nrd<=K;
}
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)
    {
        if (trans (mijl)==1)
        {
            poz=mijl;
            dr=mijl-1;
        }
        else
            st=mijl+1;
        mijl=(st+dr)>>1;
    }
    fprintf (g, "%d\n", poz);
    fclose (f);
    fclose (g);
    return 0;
}