Cod sursa(job #2185351)

Utilizator CozehNita Horia Teodor Cozeh Data 24 martie 2018 14:54:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
using namespace std;

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

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

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

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