Cod sursa(job #2894129)

Utilizator crastanRavariu Eugen crastan Data 27 aprilie 2022 13:36:22
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");

int foo(vector<int> &vals, int xv ){
    int k = 1;
    int rest = 0;
    for(int x:vals){
        if(x > xv) return -1;
        if(rest + x > xv){
            k++;
            rest = x;
        }
        else
            rest += x;

    }
    return k;

}

int main()
{
    int n,k;
    fin>>n>>k;
    vector<int> vals(n);
    for(int i = 0; i < n; i++)
    {
        fin>> vals[i];
    }
    int nrb = 20;
    int xv = 0;
    for(int i = nrb; i >= 0; i--){
        xv += (1<<i);
        int r = foo(vals, xv);
        if(r == -1)
            continue;
        int rp = foo(vals, xv-1);
        if(r <= k && (rp > k || rp == -1))
            break;
        if(r < k || (k == r && k == rp))
            xv -= (1<<i);
    }
    fout << xv;
    return 0;
}