Cod sursa(job #2428078)

Utilizator blotucosmincosmin blotucosmin Data 3 iunie 2019 18:49:42
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
const int N = 16000 * 16000 + 10;
int v[16001], k, greutate_totala, gr_max, st = 1, dr = N, mij, i;
bool verificare(int c)
{
    int x = 0, transporturi = 0;
    for(int i = 1; i <= v[0]; ++ i)
    {
        x += v[i];
        if(x > c) transporturi ++, x = v[i];
        else if(x == c) transporturi ++, x = 0;
    }
    if(x != 0) transporturi ++;
    if(transporturi <= k) return true;
    return false;
}
int main()
{
    f >> v[0] >> k;
    for(i = 1; i <= v[0]; ++ i)
    {
        f >> v[i];
        greutate_totala += v[i];
        gr_max = max(gr_max, v[i]);
    }
    if(k == 1) g << greutate_totala << "\n";
    else if(k >= v[0]) g << gr_max << "\n";
    else
    {
        while(st < dr)
        {
            mij = (st + dr) / 2;
            if(mij >= gr_max && verificare(mij)) dr = mij;
            else st = mij + 1;
        }
        g << dr;
    }
    return 0;
}