Cod sursa(job #894297)

Utilizator paul.chPaul Chelarescu paul.ch Data 26 februarie 2013 20:36:58
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
//#include <iostream>
#include<fstream>
//#include<math.h>
//#include<string>
//#include<stack>
//#include<windows.h>
//#include<time.h>
//#include<queue>
using namespace std;
//long long ;
//int ;
//stack <int> ;
//string ;
//struct e
//{
//}
//queue <e>;
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];
    }
}
inline void afisare()
{
}
int main()
{
    citire();
    bool ok;
    long long sol = 600000;
    int suma = 0, contor = 0;
    int q;
    m = (camion_min + camion_max)/2;
    while(camion_min <= camion_max)
    {
        for(q = 1; q<= n; ++q)
        {
            ok = false;
            if(suma + v[q] <= m)
            {
                suma += v[q];
                ok = true;
            }
            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;
}