Cod sursa(job #1702113)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 14 mai 2016 15:40:39
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 16005;
const int   SM = 1<<25;

int n, k;
int v[NMAX];

bool check(int cap) {
    int acc, c;

    acc = 0;
    c   = 1;

    for(int i=0; i<n; ++i) {
        if(v[i]>cap)
            return false;
        if(acc+v[i]>cap) {
            acc = 0;
            ++c;
        }
        acc += v[i];
    }
    return c<=k;
}

int main(void) {
    FILE *fi = fopen("transport.in", "r");
    FILE *fo = fopen("transport.out", "w");
    int ans;

    fscanf(fi,"%d%d",&n,&k);
    for(int i=0; i<n; ++i)
        fscanf(fi,"%d",&v[i]);

    ans = 0;
    for(int m=SM; m; m>>=1)
        if(!check(ans|m))
            ans|=m;

    fprintf(fo,"%d\n",ans+1);

    fclose(fi);
    fclose(fo);
    return 0;
}