Cod sursa(job #2513678)

Utilizator razvan123vRazvan Vranceanu razvan123v Data 23 decembrie 2019 17:06:46
Problema Transport Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 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, capacitate;

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