Cod sursa(job #2163824)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 12 martie 2018 20:05:52
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>

#define C(i) Condition(i)

using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

int N,K;
vector<int> V;

bool Condition(int x)
{
    int s1=0,i=0,nr=0;
    bool result=true;
    while(i<N && nr<=K)
    {
        s1=0;
        while(s1+V[i]<=x && i<N) s1+=V[i],i++;
        nr++;
        if(nr>K) result=false;
    }
    return result;
}

int BinSearch(int l,int r)
{
    int m=(l+r)/2;
    if(C(m) && !C(m-1)) return m;
    else
    {
        if(C(m-1)) return BinSearch(l,m-1);
        if(!C(m))  return BinSearch(m+1,r);
    }
    return m;
}

int main()
{
    f>>N>>K;
    V.resize(N);
    int Max=0,S=0;
    for(auto &i:V)
    {
        f>>i;
        Max=max(Max,i);
        S+=i;
    }
    g<<BinSearch(Max,S);

    f.close(); g.close();
    return 0;
}