Cod sursa(job #3121518)

Utilizator IdkorCareSebastian Avram IdkorCare Data 13 aprilie 2023 17:01:23
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#include <vector>

using namespace std;

int howMany(long long cost, vector<int> g, int ferriesCnt)
{
    int boats=0,sum=0;
    for(int i=0;i<g.size();i++)
    {
        if(sum+g[i]>cost)
        {
            boats++;
            if(boats > ferriesCnt)
                return ++ferriesCnt; // exceeded boat limit, return large value
            sum=0;
        }
        sum+=g[i];
    }
    return ++boats;
}

long long binaryS(vector<int> g, int ferriesCnt, long long uB, long long lB)
{
    long long minC=0;
    while(lB<uB)
    {
        long long mid=(uB+lB)/2;
        if(howMany(mid,g,ferriesCnt)<=ferriesCnt)
            minC=uB=mid;
        else lB=mid+1;
    }
    return minC;
}

int main()
{
    vector<int> g;
    int n,k;
    long long upperBound=0,lowerBound=0;
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    fin>>n>>k;
    int x;
    for(int i=0;i<n;i++)
    {
        fin>>x,g.push_back(x);
        upperBound+=x;
        if(lowerBound<x)
            lowerBound=x;
    }
    fout<<binaryS(g,k,upperBound,lowerBound)<<endl;
    return 0;
}