Cod sursa(job #1561729)

Utilizator Andrei_PopaAndreiCDG Andrei_Popa Data 4 ianuarie 2016 14:38:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");

int n,k;
int saltele[16001];
int sumaTot,max1=-1;
int min1;
int verificare(int val)
{
    int incarc=1;
    int s=0;
    int i;
    for(i=1;i<=n;i++)
    {
        s+=saltele[i];
        if(s>val)
        {
            s=saltele[i];
            incarc++;

        }
    }

    if(incarc<=k)
    return 1;
    else
    return 0;

}
void cautbin(int linf,int lsup)
{
    if(linf==lsup)
    {
        if(verificare(linf)==1)
        {
            if(linf<min1)
            min1=linf;
        }
    }
    else
    {
        int mij=(linf+lsup)/2;
        if(verificare(mij)==1)
       {
        if(mij<min1)
        min1=mij;
        cautbin(linf,mij);

       }
       else
       {
           cautbin(mij+1,lsup);
       }
    }
}

int main()
{

    f>>n>>k;
    int s=0;
    int i;
    for(i=1;i<=n;i++)
    {
        f>>saltele[i];
        sumaTot+=saltele[i];
        if(saltele[i]>max1)
        max1=saltele[i];

    }
    min1=sumaTot+1;
    cautbin(max1,sumaTot);


g<<min1;
    f.close();
    g.close();
    return 0;
}