Cod sursa(job #1260382)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 11 noiembrie 2014 10:57:04
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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, ans;
    while(1)
    {
            mij = (st+dr)/2;
            count = 0;s = 0;
            for(int i =0; i< n; i++)
            {
                    if(s + p[i] <= mij) s+=p[i];
                    else
                    {
                        s = p[i];
                        count++;
                    }
            }
            if(s <= mij) count++;
            else count+=2;
            if(count > m) st = mij+1;
            if(count <= m) {dr = mij;ans = mij;}
            if(mij == last)
            {
                   mij = ans;
                   break;
            }
            last = mij;
    }
    fprintf(fout, "%d\n", mij);
    return 0;
}