Cod sursa(job #987304)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 20 august 2013 13:44:06
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <stdio.h>
#include <fstream>
#define MAX_N 17000
using namespace std;
int v[MAX_N],n,k,answer=MAX_N,l,r;
ofstream out("transport.out");
void citire()
{
    freopen("transport.in","r",stdin);
    scanf("%d %d",&n,&k);
    int i;
    for(i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        l=max(l,v[i]);
        r+=v[i];
    }
    answer=r;
}
int determina_nr_drumuri(int capacity)
{
    int answer=1,cc=0,i;

    for(i=1; i<=n; i++)
    {
        cc+=v[i];
        if(cc>capacity)
        {
            cc=v[i];
            answer++;
        }
    }

    return answer;
}
void cautare_binara(int left,int right)
{
    int cv,m;

    if(left<=right)
    {
        m=(left+right)/2;
        //out<<m<<endl;
        cv=determina_nr_drumuri(m);

        if(cv<=k)
        {
            answer=min(answer,m);
            cautare_binara(left,m-1);
        }
        else cautare_binara(m+1,right);
    }
    //cout<<left<<endl;
}

int main()
{
    citire();
    cautare_binara(l,r);
    out<<answer;
}