Cod sursa(job #2115506)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 26 ianuarie 2018 20:36:36
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

long long int n, k, volum[16050];
long long int maxim = 0;

bool transpo(long long int x)
{
    long long int s, i = 1, nr = 0;
    while(i<=n)
    {
        s = 0;
        while(s+volum[i]<=x && i<=n)
        {
            s+=volum[i];
            i++;
        }
        nr++;
    }
    if(nr<=k)
        return true;
    return false;
}

void loga()
{
    long long int lg1 = 268435456;
    //long long int i = suma[n]/k;
    /*for(; i<suma[n]; i++)
        if(transpo(i) == 1)
        {
            printf("%lld", i);
            return;
        }*/
    long long int i = 268435456;
    for(;lg1>0; lg1>>=1)
    {
        if(i-lg1>=maxim && transpo(i-lg1))
        {
            i-=lg1;
        }
    }
    printf("%d", i);
}

void rez()
{
    for(int i = 1; i<=n; i++)
    {
        scanf("%lld\n", &volum[i]);
        if(volum[i]>maxim)
            maxim = volum[i];
    }
    loga();
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%lld %lld\n", &n, &k);
    rez();
    return 0;
}