Pagini recente » Cod sursa (job #1793618) | Cod sursa (job #449448) | Cod sursa (job #965358) | Borderou de evaluare (job #804911) | Cod sursa (job #2069267)
#include <iostream>
#include <fstream>
using namespace std;
int N, K, C[16001], mi, lo, r;
long hi;
ifstream f("transport.in");
ofstream g("transport.out");
int transport (int M, int K, int C[16001], int mi) {
int cam=0, drum=0, i=1;
while (M) {
int plin = 0;
cam=0;
//while (i<=N && cam<mi){
// if (cam+=C[i]<=mi) {cam+=C[i];
// i++;
// M--;}
while (plin==0 && i<=N) {
if (cam+C[i]<=mi){cam+=C[i]; i++; M--;}
else plin=1;
}
drum++;
}
if (drum<=K) return 1;
else return 0;
}
int main()
{
f>>N>>K;
for (int i=1; i<=N; i++) {
f>> C[i];
if (C[i]>lo) lo=C[i];
hi+=C[i];
}
while (lo<=hi) {
mi=(lo+hi)/2;
if (transport(N,K,C,mi)) {r=mi; hi=mi-1;}
else lo=mi+1;
}
g<<r;
f.close();
g.close();
return 0;
}