Cod sursa(job #1700581)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 10 mai 2016 20:17:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 16000

int v[MAXN], n;

int nTransporturi(int cap){
    int sum=0, ind=0, transp=0;
    while(ind<n){
        sum+=v[ind];
        if(sum>cap){
            sum=v[ind];
            transp++;
        }
        ind++;
    }
    if(sum>0)
        transp++;
    return transp;
}

int main(){
    int k;
    FILE*fi,*fo;
    fi=fopen("transport.in","r");
    fo=fopen("transport.out","w");
    fscanf(fi,"%d%d", &n, &k);
    int max=0, sum=0;
    for(int i=0;i<n;i++){
        fscanf(fi,"%d", &v[i]);
        if(v[i]>max)
            max=v[i];
        sum+=v[i];
    }

    int st=max, dr=sum;
    while(dr-st>1){
        int m=(st+dr)/2;
        if(nTransporturi(m)>k)
            st=m+1;
        else
            dr=m;
    }
    if(nTransporturi(st)<=k)
        fprintf(fo,"%d", st);
    else
        fprintf(fo,"%d", dr);
    fclose(fi);
    fclose(fo);
    return 0;
}