Cod sursa(job #1260343)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 11 noiembrie 2014 10:05:03
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
FILE *fin, *fout;
int *p;
int main()
{
    fin = fopen("transport.in", "r");
    fout = fopen("transport.out", "w");
    int n, m, dr = 0, st = 0, last = 0;
    fscanf(fin, "%d %d", &n, &m);
    p = new int[n];
    for(int i = 0; i< n; i++)
    {
            fscanf(fin, "%d", &p[i]);
            if(p[i] > st) st = p[i];
            dr += p[i];
    }
    int mij, s = 0, count = 0;
    while(1)
    {
            mij = (st+dr)/2;
            count = 0;
            for(int i =0; i< n; i++)
            {
                    if(s + p[i] <= mij) s+=p[i];
                    else
                    {
                        s = p[i];
                        count++;
                    }
            }
            if(count > m) st = mij+1;
            if(count <= m) dr = mij;
            if(mij == last) break;
            last = mij;
    }
    fprintf(fout, "%d\n", mij);
    return 0;
}