Cod sursa(job #1026719)

Utilizator uagamagaMatei Rogoz uagamaga Data 11 noiembrie 2013 21:52:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,k;
int v[16001];
int last;
bool up;
bool transports(int quant)
{
    int i,ctr=0;
    int temp=0;
    for(i=0;i<n;i++)
    {
        if(temp+v[i]<=quant)
        {
            temp+=v[i];
        }
        else
        {
            temp = 0;
            ctr++;
            i--;
        }
        if(i==n-1) ctr++;
        if(ctr>k) return false;

    }
    return true;

}
int find_min(int low,int high)
{

    int piv = (low+high)/2;
    if(high==low) return last;
    if(transports(piv))
    {
        last = piv;
        return find_min(low,piv);
    }
    else
    {
        return find_min(piv+1,high);
    }

}

int main()
{
    int i;
    fin>>n>>k;

    for(i=0;i<n;i++)
        fin>>v[i];

    int max=0,s=0;

    for(i=0;i<n;i++)
    {
        s+=v[i];
        if(v[i]>max) max=v[i];
    }

    fout<<find_min(max,s);

    return 0;
}