Cod sursa(job #1571363)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 17 ianuarie 2016 23:55:54
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

short int n,k;
short int *v;
int minn;

bool capacitate(int c)
{
    if(c < minn )
        return false;
    int nr = 0;
    int s = 0;
    for(int i=1;i<=n;i++)
    {
        if(s+v[i]<=c)
            s+=v[i];
        else
        {
            nr++;
            s = 0;
            if(s+v[i]<=c)
            s+=v[i];
        }
    }
    nr++;
    if(nr<=k)
        return true;
    return false;
}

int main()
{
    int x=0,y=0;
    in>>n>>k;
    v = new short int[n+1];
    for(int i=1;i<=n;i++)
        {
            in>>v[i];
            if(x<v[i])
                x = v[i];
            y+=v[i];
        }
    int ok = 0;
    int rez = -1;
    minn = x;
    while((x<=y) && (!ok))
    {
        int m = (x+y)/2;
        bool answer = capacitate(m);
        if(answer && (!capacitate(m-1)))
        {
            rez = m;
            ok = 1;
        }
        else
        {
            if(!answer)
                x = m+1;
            else
                y = m-1;
        }
    }
    out<<rez<<'\n';
    return 0;
}