Cod sursa(job #1622403)

Utilizator tanasaradutanasaradu tanasaradu Data 1 martie 2016 11:23:39
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include<iostream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int a[16005],n,k;
void Citire()
{
    int i;
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>a[i];
    fin.close();
}
/// returneaza 1 daca sirul se poate imparti
///in cel mult k secvente de suma L
int Imparteala(int L)
{
    int s=0,nrsecv,i;
    nrsecv=1;
    for(i=1;i<=n;i++)
    {
        if(a[i]>L)return 0;
        s+=a[i];
        if(s>L)
        {
            nrsecv++;
            s=a[i];
        }
    }
    if(nrsecv<=k)return 1;
    return 0;
}
int CautBin()
{
    int st,dr,m,poz;
    st=1;
    dr=256000000;
    poz=0;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(Imparteala(m)==1)
        {
            poz=m;
            dr=m-1;
        }
        else st=m+1;
    }
    return poz;
}
int main()
{
    int x;
    Citire();
    x=CautBin();
    fout<<x<<"\n";
    fout.close();
    return 0;
}