Pagini recente » Cod sursa (job #1635472) | Cod sursa (job #1001212) | Cod sursa (job #2132209) | Cod sursa (job #1747330) | Cod sursa (job #1027166)
#include <iostream>
#include <vector>
#include <algorithm>
#define INF 10000000
using namespace std;
vector<int> st;
class Truck{
public: mutable int capacity, nrT;
Truck(int c):capacity(c),nrT(-1){}
Truck(){}
int getNrT()const{
if(nrT!=-1) return nrT;
else {
nrT = 1;
int s = 0;
for(int i=0;i<st.size();i++) {
if(st[i] > capacity)
{ nrT = INF;break;}
else if(s+st[i] > capacity){
s=st[i];nrT++;
}
else s+=st[i];
}
return nrT;
}
}
bool operator<(const Truck& other)const{return this->getNrT()>other.getNrT();}
bool operator>(const Truck& other)const{return this->getNrT()<other.getNrT();}
};
int getTransportCount(int capacity) {
int nrT = 1;
int s = 0;
for(int i=0;i<st.size();i++) {
if(st[i] > capacity)
{ nrT = INF;break;}
else if(s+st[i] > capacity){
s=st[i];nrT++;
}
else s+=st[i];
}
return nrT;
}
int getBin(int st,int dr,int k) {
if(st == dr) return st;
else {
int m = (st+dr)/2;
if(getTransportCount(m) > k){
return getBin(m+1,dr,k);
}
else return getBin(st,m,k);
}
}
int main(){
int n,k,x;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>x;
st.push_back(x);
}
// vector<Truck> v;
// for(int i=0;i<257000000;i++) {
// v.push_back(Truck(i));
// }
//
// Truck mock;
// mock.nrT = k;
// vector<Truck>::iterator it= lower_bound(v.begin(), v.end(), mock);
// cout<<it->capacity;
cout<<getBin(0,257000000,k);
return 0;
}