Cod sursa(job #1014587)

Utilizator sebinechitasebi nechita sebinechita Data 22 octombrie 2013 21:50:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
#include <queue>
#include <deque>
#include <iomanip>
#include <stack>
#include <cstdio>

using namespace std;

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

#define baza 10
#define MAX 16100
#define MOD 666013

typedef long long int lli;

lli i,n,a[MAX], p, k, s, maxi;

lli verifica(lli x)
{
    lli p=1;
    lli cx=x;
    for(i=1;i<=n;i++)
    {
       // cout<<cx<<" ";
        if(a[i]<=cx)
        {
            cx-=a[i];
        }
        else
        {
            cx=x;
            p++;
            i--;
        }
    }
    return p;
}

lli BS(lli inc, lli sf)
{

    lli mare=-1, mid;
    while(inc<sf)
    {
        mid=inc+(sf-inc)/2;
        p=verifica(mid);
        if(p<=k)
        {
            sf=mid;
            mare=mid;
        }
        else
        {

            inc=mid+1;
        }

    }
    return mare;
}

int main()
{

    fin>>n>>k;
    maxi=1;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
        if(a[maxi]<a[i])
            maxi=i;
        s+=a[i];

    }
    fout<<BS(a[maxi], s);





    return 0;
}