Cod sursa(job #1211350)

Utilizator IonSebastianIon Sebastian IonSebastian Data 22 iulie 2014 14:25:54
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>

using namespace std;

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

const int MAX_N = 16000;

int v[MAX_N+1], partSum[MAX_N+1];
int n;

int transpNo(int start,int capacity)
{
    int i = start+1;
    while(i <= n && partSum[i]-partSum[start] <= capacity)
    {
        i++;
    }
    i--;
    if(i == n)
    {
        return 1;
    }
    int k = 1;
    k += transpNo(i, capacity);
    return k;
}

int main()
{
    int k;
    int sum = 0, maxVol = 0;
    int i;

    in >> n >> k;

    for(i = 1; i <= n; i++)
    {
        in >> v[i];
        partSum[i] = partSum[i-1] + v[i];
        sum += v[i];
        if(v[i] > maxVol)
        {
            maxVol = v[i];
        }
    }
    int st = maxVol, dr = sum, m;
    int x;

    while(st <= dr)
    {
        m = (st+dr)/2;
        x = transpNo(0,m);
        if(x > k)
        {
            st = m+1;
        }
        else
        {
            if(x < k)
            {
                dr = m-1;
            } else
            {
                while(x == k)
                {
                    m--;
                    x = transpNo(0,m);
                }
                st = dr+1;
                m++;
            }
        }
    }
    out << m;
    return 0;
}