Cod sursa(job #1506116)

Utilizator Andrei501Clicinschi Andrei Andrei501 Data 20 octombrie 2015 00:06:47
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>

int v[16001];

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

    int N,K,i,S=0,max=-1;
    fscanf (fin,"%d",&N);
    fscanf (fin,"%d",&K);

    for (i=1; i<=N; i++)
    {
        fscanf (fin,"%d",&v[i]);
        S+=v[i];
        if (v[i]>max)
        {
            max=v[i];
        }
    }

    int x,k,p,sol;
    int x1,x2;

    x1=max;
    x2=S;

    while (x1<=x2)
    {
        x=(x1+x2)/2;
        S=0;
        k=0;

        for (i=1; i<=N; i++)
        {
            S+=v[i];
            p=0;

            if (S>x)
            {
                S=0;
                i--;
                k++;
                p=1;
            }
        }

        if (p==0)
        {
            k++;
        }

        if (k<=K)
        {
            sol=x;
            x2=x-1;
        }
        else
        {
            x1=x+1;
        }
    }

    fprintf (fout,"%d",sol);

    fclose (fin);
    fclose (fout);
    return 0;
}