Cod sursa(job #1675157)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 5 aprilie 2016 09:39:48
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>
#define MOD 666013
#define ll long long
using namespace std;
int N, K, A[16005], st, dr;
bool check(int k)
{
    int x = 0, nr = 0;
    for(int i = 1; i <= N; i++)
    {
        if(x+A[i] > k) 
        {
            nr++;
            x = A[i];
        }
        else x += A[i];
    }
    if(nr <= K) return 1;
    return 0;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);    
    assert(freopen("transport.in","r", stdin));
    assert(freopen("transport.out","w", stdout));
    cin >> N >> K;
    for(int i = 1; i <= N; i++)
    {
        cin >> A[i];
        st = max(st, A[i]);
        dr += A[i];
    }
    while(st <= dr)
    {
     int pivot = (st+dr)/2;   
        if(check(pivot)) dr = pivot-1;
            else st = pivot+1;
    }
    cout << st+1;
    return 0;
}