Cod sursa(job #987228)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 20 august 2013 12:07:51
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <stdio.h>
#include <fstream>
#define MAX_N 16001
using namespace std;
int v[MAX_N],n,k,answer=MAX_N;
ofstream out("transporturi.out");
void citire()
{
    freopen("transporturi.in", "r", stdin);
    scanf("%d %d",&n, &k);
    int i;
    for(i=1; i<=n; i++) scanf("%d",&v[i]);
}
int numar_curent_transporturi(int capacity)
{
    int cs=capacity, answer=0,i;

    for(i=1; i<=n; i++)
    {
        if(v[i]<=cs)  cs-=v[i];
        else
        {
            answer++,cs=capacity;
            cs-=v[i];
        }
    }
    return answer+1;
}
void cautare_binara(int left, int right)
{
    //out<<left<<' '<<right<<endl;
    if(left<=right)
    {
        int m=(left+right)/2,current_value;

        current_value=numar_curent_transporturi(m);

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

}
int main()
{
    citire();
    cautare_binara(7,20);
    out<<answer;
    return 0;
}