Cod sursa(job #3181626)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 7 decembrie 2023 15:34:28
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int NMAX = 16000;
const int DRUMMAX = NMAX * NMAX;
int v[NMAX+1];

int main()
{
    int n, k, i, st = 0, dr = 0, ans;
    in >> n >> k;
    for( i = 1 ; i <= n ; i++ ){
        in >> v[i];
        dr += v[i];
        st = max(st, v[i]);
    }
    while( st <= dr ){
        int suma = v[1], drumuri = 0, rez = ( st + dr ) / 2;
        if( suma <= rez ){
            for( i = 2 ; i <= n && drumuri < k; i++ ){
                suma += v[i];
                if( suma > rez )
                    drumuri++, suma = v[i];
                else if( suma == rez ){
                    suma = 0;
                    drumuri++;
                }
            }
            if( i == n+1 ){
                if( drumuri < k || ( drumuri == k && suma == 0 )){
                    dr = rez-1;
                    ans = rez;
                }
                else
                    st = rez + 1;
            }
            else
                st = rez + 1;
        }
        else
            st = rez + 1;
    }
    out << ans << endl;
    return 0;
}