Cod sursa(job #1778192)

Utilizator kikiandreiCristian Andrei Popescu kikiandrei Data 13 octombrie 2016 16:44:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, k, rasp;
int g[16001];

int K(int cap)
{
    int si=0, calatorie=1;
    for (int i=1; i<=n; i++)
    {
        if (cap>=si+g[i]) si+=g[i];
        else
        {
            si=g[i];
            calatorie++;
        }
    }
    return calatorie;
}

int caut(int a, int b)
{
    int m=(a+b)/2;
    while (a<=b)
    {
        int m=(a+b)/2;
        if (K(m)<=k)
        {
            rasp=m;
            b=m-1;
        }
        else a=m+1;
    }
    return rasp;
}

int main()
{
    in>>n>>k;
    int m=0,S=0;
    for (int i=1; i<=n; i++)
    {
        in>>g[i];
        S+=g[i];
        if (g[i]>m) m=g[i];
    }
    out<<caut(m,S);
    return 0;
}