Pagini recente » Cod sursa (job #1802449) | Cod sursa (job #1917284) | Cod sursa (job #32847) | Cod sursa (job #886574) | Cod sursa (job #2857824)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int verificare(int mid, int transport[]);
int n, k;
int main()
{
int i, low = -1, high, solutie, mid;
fin>>n>>k;
int transport[n];
for(i = high = 0; i < n; i++){
fin>>transport[i];
high += transport[i];
if(transport[i] > low)
low = transport[i];
}
if(k == 1 || n == 1)
fout<<high;
else{
while(low < high - 1){
mid = (high + low) / 2;
if(verificare(mid, transport)){
cout<<"verificam, mid = "<<mid<<", high = "<<high<<", low = "<<low<<"\n";
solutie = mid;
high = mid;
}
else{
cout<<"mid = "<<mid<<", high = "<<high<<", low = "<<low<<"nu a mers\n";
low = mid;
}
}
if(low == high - 1){
mid = (high + low) / 2;
if(verificare(mid, transport)){
cout<<"verificam, mid = "<<mid<<", high = "<<high<<", low = "<<low<<"\n";
solutie = mid;
high = mid;
}
else{
cout<<"mid = "<<mid<<", high = "<<high<<", low = "<<low<<"nu a mers\n";
low = mid;
}
}
fout<<solutie;
}
}
int verificare(int mid, int transport[]){
int i, j, sum;
for(i = j = 0; i < k; i++){
sum = 0;
while(sum + transport[j] <= mid){
sum += transport[j];
j++;
if(j >= n)
return 1;
}
}
return 0;
}