Cod sursa(job #2077358)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 27 noiembrie 2017 22:27:22
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

using namespace std;

FILE *in,*out;

const int nmax = 16005;
int v[1+nmax];

int n,k;

int verifica(int x)
{
    int sum = 0,tr = 0;
    for(int i = 1;i <= n;i ++)
    {
        if(v[i] > x)
            return k+2;
        sum += v[i];
        if(sum > x)
        {
            sum = v[i];
            tr ++;
        }
    }
    if(sum != 0)
        tr ++;
    return tr;
}

int cautbin()
{
    int r = 0,pas = 1 << 30;
    while(pas)
    {
        if(verifica(r+pas) > k)
            r += pas;
        pas >>= 1;
    }
    return r+1;
}

int main()
{
    in = fopen("transport.in","r");
    out = fopen("transport.out","w");
    fscanf(in,"%d %d",&n,&k);
    for(int i = 1;i <= n;i ++)
        fscanf(in,"%d",&v[i]);
    int sol = cautbin();
    fprintf(out,"%d",sol);
    return 0;
}