Cod sursa(job #2875553)

Utilizator dariusbandilaBandila Darius-Mihai dariusbandila Data 21 martie 2022 21:00:33
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int profu(int m,int n,int a[]){
    int s=0,cnt=1;
    for(int i=1;i<=n;i++){
        if(s+a[i]<=m)s+=a[i];
        else cnt++,s=a[i];
    }
    return cnt;
}
int main() {
    //cap minima = max(cap minima,a[i])
    // cap max <=> k=1 => cam minima = S(a[i]) (i = 1,...,n);
    int n,mij,k,maxi(0),st=-1,ans,dr(0),s(0),a[16500];
    fin >> n >> k;
    for(int i=1;i<=n;++i)fin>>a[i],st=max(st,a[i]),dr+=a[i];
    for(int i=1;i<=n;i++){
        while(st<=dr){
            mij=(st+dr)/2;
            if(profu(mij,n,a)<=k)ans=mij,dr=mij-1;
            else st=mij+1;
        }
    }
    fout << ans;
    return 0;
}