Cod sursa(job #1961643)

Utilizator Cristi01052Tudorache Christian Cristi01052 Data 11 aprilie 2017 11:29:20
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>

using namespace std;
const int N = 16000*16000;
int v[16001];
int caut_bin(int n, int k)
{
    int i, step , s = 0, j, nr_drum = 0;
    bool ok;
    for(step = 1; step <= N; step <<= 1);
    for(i = 0; step; step >>= 1)
    {
        ok = true;
        nr_drum = 0;
        for(j = 0; j < n; j++)
        {
            if (v[j] > step + i)
                ok = false;
            if(s + v[j] <= step + i)
                s+=v[j];
            else
            {
                s = v[j];
                nr_drum++;
            }
        }
        if(ok == false || nr_drum > k)
            i += step;
    }
    return i + 1;
}
int main()
{
    FILE *in, *out;
    in = fopen("transport.in", "r");
    out = fopen("transport.out", "w");
    int n, k;
    fscanf(in, "%d%d", &n, &k);
    int i;
    for(i = 0; i < n; i++)
        fscanf(in, "%d", &v[i]);
    fprintf(out, "%d", caut_bin(n, k));
    return 0;
}