Cod sursa(job #2366543)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 4 martie 2019 20:44:57
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
int v[16001];
ifstream fin ("transport.in");
ofstream fout("transport.out");

bool check(int value, int n, int k){
    int actual = 0, i ;
    for(i = 1; i <= n and k; ++i){
        actual += v[i];
        if(actual > value){
            k --;
            actual = v[i];
        }
        //fout << actual << " " << k << '\n';
    }
    if(actual <= value and k > 0) return true;
    return false;
}
int binarySearch(int n, long long s, int k){
    int current = 0;
    for(int power = 24; power >= 0; --power){
        if(!check(current + (1 << power), n, k))
            current += (1 << power);
    }
    return current;
}

int main(){
    int n, k;
    int s = 0, maxim = 0;
    fin >>  n >> k;
    for(int i = 1; i <= n; ++i){
        fin >> v[i];
        maxim = max(v[i], maxim);
        s += v[i];
    }
    s /= k;
    s++;
    s = max(maxim ,s);
    fout << binarySearch(n, s, k) + 1;
    //fout << check(7, n, k);
    return 0;
}