Cod sursa(job #1801702)

Utilizator kywyPApescu tiGEriu kywy Data 9 noiembrie 2016 15:47:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<iostream>
#include<cstdio>
using namespace std;
int sum, k, n, maxx, v[16007];
bool check(int val)
{
    int ct = 1, s = 0;
    for(int i = 1; i <= n; ++i)
    {
        if(s + v[i] <= val)
        {
            s += v[i];
        }
        else
        {
            ++ct;
            if(ct > k) return 0;
            s = v[i];
        }
    }
    if(ct <= k) return 1;
}
int cautbin(int x)
{
    int pas = 1, start = maxx - 1;
    for(; pas <= x; pas <<= 1);
    for(; pas; pas>>=1)
    {
        if(start + pas > x) continue;
        if(check(start + pas) == 0) start += pas;
    }
    return start;
}
int main()
{
    FILE* in = fopen("transport.in", "r");
    FILE* out = fopen("transport.out", "w");
    fscanf(in, "%d%d", &n, &k);
    for(int i = 1; i <= n; ++i)
    {
        fscanf(in, "%d", &v[i]);
        maxx = max(maxx, v[i]);
        sum += v[i];
    }
    fprintf(out, "%d", cautbin(sum) + 1);
}