Pagini recente » Cod sursa (job #2397680) | Cod sursa (job #1604971) | Cod sursa (job #2960438) | Cod sursa (job #1648881) | Cod sursa (job #1298028)
#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 n;
int k;
int NumarDrumuri(int VolumSaltea){
if(VolumSaltea < maxx){
return (1LL<<30);
}
int nd = 1;
int ns = 0;
for(int i = 1 ; i <= n ; ++i){
if(ns + x[i] > VolumSaltea){
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 - left) >> 1); /// Middle = Volum saltea
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");
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;
}