Cod sursa(job #894306)

Utilizator paul.chPaul Chelarescu paul.ch Data 26 februarie 2013 20:38:27
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream>
using namespace std;
int v[16010], n , k, camion_max, camion_min, m;
ifstream fin("transport.in");
ofstream fout("transport.out");
inline void citire()
{
    fin >> n >> k;
    for(int i = 1; i <= n; ++i)
    {
        fin >> v[i];
        if(v[i] > camion_min) camion_min = v[i];
        camion_max += v[i];
    }
}
int main()
{
    citire();
    long long sol = 800000;
    int suma = 0, contor = 0;
    int q;
    m = (camion_min + camion_max)/2;
    while(camion_min <= camion_max)
    {
        for(q = 1; q<= n; ++q)
        {
            if(suma + v[q] <= m)
            {
                suma += v[q];
            }
            else
            {
                contor++;
                suma = v[q];
            }
        }
        if(suma <= m)++contor;
        if(contor <= k)
        {
            camion_max = m - 1;
            m = (camion_min + camion_max)/2;
            contor = 0;
            suma = 0;
        }
        if(contor > k)
        {
            camion_min = m + 1;
            m = (camion_min + camion_max)/2;
            contor = 0;
            suma = 0;
        }
        if(camion_min == camion_max) sol = m;
    }
    fout << sol;
    return 0;
}