Cod sursa(job #2081701)

Utilizator karakter98Irimia Robert karakter98 Data 4 decembrie 2017 23:49:11
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
using namespace std;

FILE* fin;
FILE* fout;

int n, k, V[16000], Max, low, high, mid, C;

int requiredTransports(int v[], int n, int x)
{
    int retval = 0;
    int i = 0;
    while(i < n)
    {
        int sum = 0;
        while(sum + v[i] <= x && i < n)
        {
            sum += v[i];
            ++i;
        }
        ++retval;
    }
    return retval;
}

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

    int s = 0;
    fscanf(fin, "%d %d", &n, &k);
    for(int i = 0; i < n; ++i)
    {
        fscanf(fin, "%d", V + i);
        s += V[i];
        if(V[i] > Max)
            Max = V[i];
    }

    low = Max;
    high = s;

    while(low != high)
    {
        mid = (low + high) / 2;
        if(requiredTransports(V, n, mid) <= k)
        {
            C = mid;
            high = mid;
        }
        else {
            low = mid + 1;
        }
    }

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

    return 0;
}