Cod sursa(job #1297995)

Utilizator kappykkDragos kappykk Data 22 decembrie 2014 14:43:13
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#define VM 16005
#include <stack>

using namespace std;

int x[VM];
stack<int> a;
stack<int> b;

int maxx = -VM;

int NumarDrumuri(int n){
    if(n < maxx){
        return (1LL<30);
    }
    int nd = 1;
    int ns = 0;
    for(int i = 1 ; i <= n ; ++i){
        if(ns + x[i] > n){
            ns = 0;
            ++nd;
        }
        ns += x[i];
    }
    return nd;
}

int CautareBinara(int left , int right , int k){
    if(left > right){
        return maxx;
    }
    int middle = (left + right) >> 1;
    int nd = NumarDrumuri(middle);
    if(nd <= k && NumarDrumuri(middle - 1) > k)
		return middle;
	if(nd <= k)
		return CautareBinara(left , middle - 1 , k);
	else
		return CautareBinara(middle + 1 , right , k);
}

int main()
{
    ifstream f("transport.in");
    ofstream g("transport.out");
    int n;
    int k;
    f>>n;
    f>>k;
    for(int i = 1 ; i <= n ; ++i){
        f>>x[i];
        maxx = max(maxx , x[i]);
    }
    int VolumMinim = CautareBinara(maxx , VM + VM , k);
    g<<VolumMinim;
    return 0;
}