Cod sursa(job #2618257)

Utilizator mihaimbMihai Badea mihaimb Data 24 mai 2020 00:46:45
Problema Transport Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <iostream>
#include <queue>

using namespace std;

bool poate(queue<int> Q, int cap, int k)
{
    int it=0;
    while(!Q.empty())
    {
        int rem=cap;

        while(rem>0)
        {
            if(!Q.empty() && rem-Q.front()>=0)
            {
                rem=rem-Q.front();
                Q.pop();
            }
            else
            {
                rem=0;
            }

        }

        it++;
    }

    if(it<=k) return true;

    return false;

}

int rez(queue<int>Q, int l, int r, int k)
{
    if(r-l==1)
    {
        if(poate(Q,r,k))
        {
            return r;
        }
        if(poate(Q,l,k))
        {
            return l;
        }
        return -1;
    }

    int m=l+(r-l)/2;

    if(poate(Q,m,k))
    {
        if(poate(Q,m-1, k))
        {
            return rez(Q,l, m-1, k);
        }
        return m;
    }
    return rez(Q,m+1, r, k);
}



int main()
{

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

    queue<int> Q;

    int n,k,t,ma=0,s=0;

    fin>>n>>k;

    for(int i=0; i<n; i++)
    {
        fin>>t;
        if(t>ma) ma=t;
        s=s+t;
        Q.push(t);
    }

    fout<<rez(Q,ma,s,k)<<'\n';


    return 0;

}