Cod sursa(job #2615371)

Utilizator robertnanu_fmiNanu Robert-Ionut robertnanu_fmi Data 14 mai 2020 15:16:41
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n,k,a[160001],s,final,Max=-1;
int verificare(int random)
{
    int sum_cap=0,nr_drumuri=1;
    for(int i=0;i<=n && nr_drumuri<=k;i++)
    {
        sum_cap+=a[i];          ///adun cap. saltelelor pana depaseste "posibila" capacitate din caut_binara
        if(sum_cap>random)
        {
            sum_cap=a[i];       ///a depasit-o, reinitializez suma pentru a lua valoarea elementului cu ajutorul caruia s-a depasit "posibila" capacitate,
                                ///pentru a putea incarca din nou camionul pentru urmatorul drum
            nr_drumuri++;       ///astfel, am facut un drum si cresc nr acestora
        }
    }
    if(nr_drumuri<=k) return 1;
    else return 0;
}

void caut_binara(int st, int dr)
{
    while(st <= dr)
    {
        int mij = (st+dr)/2;
        if(verificare(mij)==1)
        {
            final=mij;
            dr = mij -1;
        }
        else
        {
            st = mij+1;
        }
    }
}
int main()
{
    f>>n>>k;
    for(int i=1; i<=n; i++)
    {
        f>>a[i];
        s+=a[i];        ///calculez suma capacitatilor saltelelor
        if(a[i]>Max)
            Max=a[i];   ///capacitatea maxima a unei saltele
    }
    caut_binara(Max,s);  ///trebuie sa ma asigur ca respectivul camion imi poate transporta cea mai mare saltea
    g<<final;        ///si in caz ca numarul de drumuri maxim este 1, trebuie sa ma asigur ca am un camion cu capacitatea destul de mare pentru toate saltelele la un loc
    return 0;
}