Cod sursa(job #2513674)

Utilizator razvan123vRazvan Vranceanu razvan123v Data 23 decembrie 2019 17:04:26
Problema Transport Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
//
//  main.cpp
//  transporturi_InfoArena
//
//  Created by Razvan Vranceanu on 23/12/2019.
//  Copyright © 2019 Razvan Vranceanu. All rights reserved.
//

#include <fstream>
#define NAMX 16001
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");

int n, k, stiva[NAMX], maxi;

bool calcul_capacitate(int c, int n, int k, int v[]){
    int transporturi=1, capacity=c;
    for(int i=1;i<=n;i++){
        if(v[i]<=capacity){
            capacity-=v[i];
        }
        else if(v[i]>capacity){
            transporturi++;
            capacity=c-v[i];
        }
    }
    if(transporturi>k) return false;
    return true;
}
//caut binar capacitatea minima a camionului
//daca gasesc o capacitate care este ok, mai caut una care sa fie posibila
//daca capacitatea aleasa este prea mica, caut una mai mare
int cautare_binara(int n, int v[], int maxi,int k){

    int st=maxi, dr=16000;
    int m;    int capacitate;
    while(st<=dr){
        m=(st+dr)/2;
        if(calcul_capacitate(m, n, k, v)==1){
             capacitate=m;
            dr=m-1;
        }
        else st=m+1;
    }
    return capacitate;
}
int main() {
    f>>n>>k;
    for(int i=1;i<=n;i++){
        f>>stiva[i];
        if(maxi<stiva[i]) maxi=stiva[i];
    }
    g<<cautare_binara(n, stiva, maxi, k);
    return 0;
}