Pagini recente » Cod sursa (job #1303517) | Cod sursa (job #1344103) | Cod sursa (job #1153875) | Cod sursa (job #1997229) | Cod sursa (job #1297995)
#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;
}