Cod sursa(job #1708141)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 26 mai 2016 17:56:03
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
using namespace std;
const int NMAX = 16000;
int v[NMAX + 5];
int main() {
    freopen("transport.in" , "r" , stdin);
    freopen("transport.out" , "w" , stdout);
    int n , i , s , k , st , dr , med , c , tr , sum , last;
    scanf("%d%d" , &n , &k);
    s = 0;
    for(i = 1 ; i <= n ; i ++) {
        scanf("%d" , &v[i]);
        s = s + v[i];
    }
    st = 1;
    dr = s;
    last = 0;
    while(st <= dr) {
        med = (st + dr) / 2;
        c = med;
        tr = 0;
        sum = 0;
        for(i = 1 ; i <= n ; i ++) {
            if(v[i] > c) {
                tr = k + 1;
                sum = 0;
                break;
            }
            if(sum + v[i] > c) {
                tr ++;
                sum = v[i];
            } else
                sum = sum + v[i];
        }
        if(sum > 0)
            tr ++;
        if(tr <= k) {
            last = med;
            dr = med - 1;
        } else
            st = med + 1;
    }
    printf("%d\n" , last);
    return 0;
}