Cod sursa(job #1515183)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 1 noiembrie 2015 11:33:19
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>

using namespace std;

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

int n,a[16001],k;

bool verificare(int k,int s)
{
    int i=0,sum;
    while(k>0 && i<=n)
    {
        sum=0;
        while(sum<s && i<n)
        {
            i++;
            sum+=a[i];
        }
        if(sum>s) i--;
        k--;
    }
    if(i<n) return 0;
        else return 1;
}
int binary_search(int max,int suma)
{
    int i,step,val=(max+suma)/2;
    for(step=max;step<=suma;step<<=1);
    for(i=1;step;step>>=1)
        if(i+step<suma && i+step<val) i+=step;
    return i;
}

int main()
{
    int i,max=0,suma=0,min,mij;
    in>>n>>k;
    for(i=1;i<=n;i++)
    {
        in>>a[i];
        if(a[i]>max) max=a[i];
        suma+=a[i];
    }
    min=suma;
    /*while(verificare(k,max)==0)
    {
        max++;
    }*/

    while(max<suma)
    {
        mij=(max+suma)/2;
        //out<<"Mijlocul este:"<<mij<<"\t max este:"<<max<<"\t suma este:"<<suma<<"\n";
        if(verificare(k,mij)==0)
        {
            max=mij+1;
        }else{
            min=mij;
            suma=mij;
        }
        //out<<"Minimul este:"<<min<<"\n";
    }
    out<<min;
    in.close();
    out.close();
    return 0;
}