Cod sursa(job #2332646)

Utilizator stefanut999Paul Colta stefanut999 Data 30 ianuarie 2019 22:14:57
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#define max(a,b) a > b ? a : b
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,s[16002],suma,maximao = -1,raspuns = 0;

void citire()
{
    fin>>n>>k;
    int i;
    for(i = 1; i <= n; ++i)
        {
            fin>>s[i];
            suma += s[i];
            maximao = max(maximao, s[i]);
        }
}

void rezolvare()
{
    int solutie,st = maximao, dr = suma, i, drum, cap,mijl;
    while(st <= dr)
    {
        mijl = (st + dr) / 2;
        drum = cap = 0;
        for(i = 1; i <= n; ++i)
            if(cap + s[i] <= mijl && s[i] <= mijl)
                cap += s[i];
            else
                {
                    drum++;
                    cap = s[i];
                }
     if(cap <= mijl)
        drum++;
     if(drum > k)
        st = mijl + 1;
     else
        {
        dr = mijl - 1;
        solutie = mijl;
        }

    }
  fout<<solutie;
}

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