Cod sursa(job #2072109)

Utilizator EmplopiStefan Nitu Emplopi Data 21 noiembrie 2017 13:35:54
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>

using namespace std;

int v[16000];
char trc[16000];

int verif(int rsp, int k, int n){
    int s, st=0, dr=n-1;
    while(k>0 && dr>st){
        if(v[dr]<=rsp){
            s=v[dr];
            while(s+v[st]<=rsp && st<dr){
                s+=v[st];
                st++;
            }
            //printf("%d, %d\n", st, dr);
            dr--;
        }
        k--;
    }
    //printf("\n");
    if(dr>st)
        return 0;
    //printf("\t%d %d: %d!!\n", st, dr, rsp);

    return 1;
}

int cautbinrasp(int n, int k){
    int poz=0, pas;
    pas=1<<27;
    while(pas!=0){
        if(verif(poz+pas, k, n)==0)
            poz+=pas;
        pas/=2;
    }

    return poz;
}

int main(){
    FILE *fin, *fout;
    int n, k, i;
    fin=fopen("transport.in", "r");
    fout=fopen("transport.out", "w");
    fscanf(fin, "%d%d", &n, &k);
    for(i=0;i<n;i++)
        fscanf(fin, "%d", &v[i]);
    fprintf(fout, "%d", cautbinrasp(n, k)+1);
    fclose(fin);
    fclose(fout);

    return 0;
}