Cod sursa(job #2185312)

Utilizator CozehNita Horia Teodor Cozeh Data 24 martie 2018 14:37:16
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#define ll long long
using namespace std;

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

ll v[16010],sum,g,n;

ll cautbin(ll mx){
    ll st = 1,dr = sum;
    ll sum2=0,mij,i,counter=0,now=dr;
    ll c;
    while(st < dr){
        c = dr;
        mij = (st+dr)/2;
        sum2=0;
        counter=0;
        if(dr < mx){
            st = dr;
            dr = (dr+now)/2;
            continue;
        }
        for(i = 1; i <= n; i++){
            if(sum2+v[i] < dr) sum2 += v[i];
            else if(sum2+v[i] == dr) counter++,sum2=0;
            else i--,counter++,sum2=0;
        }
        if(sum2 && sum2 < dr) counter++,sum2=0;
        if(counter > g){
            st = dr;
            dr = (dr+now)/2;
        }
        else now=dr,dr = mij;
    }
    return c;
}

int main()
{
    fin>>n>>g;
    ll i,mx=0,nr;
    for(i = 1; i <= n; i++){
        fin>>nr;
        v[i] = nr;
        sum+=nr;
        mx = max(mx,nr);
    }
    fout<<cautbin(mx);
}