Cod sursa(job #1007041)

Utilizator Viva12Ferentz Sergiu Viva12 Data 8 octombrie 2013 02:11:01
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#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;
}