Cod sursa(job #895710)

Utilizator DanFodorFODOR Dan Horatiu DanFodor Data 27 februarie 2013 12:19:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>

using namespace std;

int n, x, k, v[16021];

int ok (int m)
{
    int j=1, cap, transp=0;
    while (j<=n)
    {
        cap=0;
        while (cap+v[j]<=m)
            cap+=v[j++];
        transp++;
    }
    if (transp<=k)
        return 1;
    return 0;
}

int main()
{
    FILE *F = fopen("transport.in", "r");
    FILE *G = fopen("transport.out", "w");
    int i, li=0, lf=0, a;
    int x;
    fscanf(F, "%d %d", &n, &k);
    for (i=1; i<=n; i++)
    {
        fscanf(F, "%d", &v[i]);
        lf+=v[i];
        if (v[i]>li)
            li=v[i];
    }
    while (li<=lf)
    {
        x=(li+lf)/2;
        a=ok(x);
        if (a)
            lf=x-1;
        else
            li=x+1;
    }
    if (!ok(x)) ++x;
    fprintf(G, "%d", x);
    fclose(F);
    fclose(G);
    return 0;
}