Cod sursa(job #1410161)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 30 martie 2015 21:45:17
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>

using namespace std;

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

int s[16005];
int n, k;

void citire()
{
    f>>n>>k;
    for(int i=1; i<=n; i++)
        f>>s[i];
}

int verif(int val)
{
    int nrt, i, sum=0;
    nrt = 1;
    for(i=1; i<=n; i++){
        if(sum + s[i] <= val)
            sum += s[i];
        else{
            if(s[i] <= val)
                sum = s[i];
            else
                return 0;
            nrt++;
        }
    }

    return nrt<=k;
}


void cautare()
{
    int st=1, dr=1000000000, mid, sol;
    mid = (st+dr)/2;
    while(st<=dr)
    {
        if(verif(mid)){
            sol = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
        mid = (st+dr)/2;
    }
    g<<sol<<"\n";
}

int main()
{
    citire();
    cautare();
    return 0;
}