Pagini recente » Cod sursa (job #2644606) | Cod sursa (job #2694691) | Cod sursa (job #569057) | Cod sursa (job #1343610) | Cod sursa (job #533595)
Cod sursa(job #533595)
// http://infoarena.ro/problema/transport
#include <fstream>
#include <algorithm>
using namespace std;
#define maxSize 16002
ifstream in("transport.in");
ofstream out("transport.out");
int lenght;
int numberOfTransports;
int volume[maxSize];
int transports(int size);
int search(int left,int right);
int main() {
int maxim = 0;
int sum = 0;
in >> lenght >> numberOfTransports;
for(int i=1;i<=lenght;i++) {
in >> volume[i];
sum = sum + volume[i];
if(maxim < volume[i])
maxim = volume[i];
}
out << search(*max_element(volume,volume+lenght),sum);
return (0);
}
int search(int left,int right) {
int middle = (left + right) / 2;
int answer = transports(middle);
if(answer == numberOfTransports) {
if(answer != transports(middle-1))
return middle;
else
return search(left,middle);
}
else
if(answer < numberOfTransports)
return search(left,middle);
else
return search(middle+1,right);
}
int transports(int size) {
int number = 0;
int current = 0;
for(int i=1;i<=lenght;i++)
if(current + volume[i] <= size)
current+=volume[i];
else {
current = volume[i];;
number++;
}
if(current)
number++;
return number;
}