Pagini recente » Cod sursa (job #904306) | Cod sursa (job #1598928) | Cod sursa (job #2949293) | Cod sursa (job #1863676) | Cod sursa (job #1007041)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int n,k;
int minV = -2,maxV = 0;
queue<int> s;
void scan(){
fin >> n >> k;
for(int i =0 ; i < n ; i++){
int x;
fin >> x;
if(x > minV)
minV = x;
maxV += x;
s.push(x);
}
}
bool isValueOk(int value){
int currentCap =0;
int currentK = k;
queue<int> auxS = s;
int currentItem;
cout << value << endl;
while(!auxS.empty()){
if (currentK == 0)
break;
currentItem = auxS.front();
cout << currentItem << " " << currentCap << " " << currentK<<endl;
if(currentCap + currentItem <= value)
{
currentCap+= currentItem;
auxS.pop();
}
else
{
currentK --;
currentCap = 0;
}
}
cout << currentItem << " " << currentCap << " " << currentK<<endl;
if(auxS.empty() == true){
return true;
}
return false;
}
int rightValue;
int binarySearch(int min,int max){
if(min == max)
return min;
int val = (min+max) / 2;
if(isValueOk(val) == true){
rightValue = val;
return binarySearch(min,rightValue);
}
else
{
return binarySearch(val+1,max);
}
}
int main(){
scan();
fout<<binarySearch(minV,maxV) << endl;
return 0;
}