Cod sursa(job #1496168)

Utilizator dnprxDan Pracsiu dnprx Data 4 octombrie 2015 15:12:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>
#define nmax 16001

using namespace std;

int a[nmax], n, k, C;

void Citire()
{
    int i;
    ifstream fin("transport.in");
    fin >> n >> k;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    fin.close();
}

/// ret. true daca se pot incarca in k transporturi de capacitate C
bool Verifica(int C)
{
    int i, cnt, s;
    cnt = 0;
    s = 1000000001;
    for (i = 1; i <= n; ++i)
    {
        if (a[i] > C) return false;
        if (s + a[i] <= C) s += a[i];
        else
        {
            cnt++;
            s = a[i];
        }
    }
    if (cnt > k) return false;
    return true;
}

void CautBin()
{
    int st, dr, m;
    st = 1; dr = 256000000;
    C = 256000000;
    while (st <= dr)
    {
        m = (st + dr) / 2;
        if (Verifica(m))
        {
            C = m;
            dr = m - 1;
        }
        else st = m + 1;
    }
    ofstream fout("transport.out");
    fout << C << "\n";
    fout.close();
}

int main()
{
    Citire();
    CautBin();
    return 0;
}