Cod sursa(job #3001455)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 13 martie 2023 17:50:59
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 16005;
const int INF = (1<<29);

int a[NMAX],n,k,maxim=0;
int sol;

bool verific(int nr){
    int sum = 0;
    int nr_transporturi = 0;
    for(int i=1;i<=n;i++){
        if(sum+a[i] < nr){
            sum+=a[i];
        } else {
            nr_transporturi++;
            sum=a[i];
        }
    }
    if(nr_transporturi > k) return false;
    return true;
}

void cautare_binara(int st,int dr){
    while(st<=dr){
        int mij=(st+dr)/2;
        bool ok = verific(mij);
        if(ok==true){
            dr=mij-1;
            sol = mij;
        } else st=mij+1;
    }
}

int main() {
    fin >> n >> k;
    for(int i=1;i<=n;i++){
        fin >> a[i];
        if(a[i]>maxim) maxim=a[i];
    }
    cautare_binara(maxim,INF);
    fout << sol;
    return 0;
}