Advertisement
_cronos2

Untitled

May 20th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1.  
  2. vector <Player> getTeam(vector <Player> players){
  3.     int size = players.size(), level = 0,
  4.         total_score = getTeamScore(players),
  5.         curr_best_diff = total_score,
  6.         curr_score = 0, curr_diff = total_score, new_diff;
  7.  
  8.     vector <Player> curr_solution, curr_best_solution;
  9.     curr_solution.reserve(players.size());
  10.     stack <int> ref;
  11.     ref.push(-1);
  12.  
  13.     while(level > -1){  // TODO: revise diffs stuff
  14.         assert(level == size or level == players[level].id or level == -1);
  15.  
  16.         if(level < size and curr_score <= total_score / 2){
  17.             new_diff = curr_diff - 2 * players[level].score;
  18.  
  19.             if(abs(new_diff) < abs(curr_diff)){
  20.                 curr_solution.push_back(players[level]);
  21.                 curr_diff = new_diff;
  22.                 curr_score += players[level].score;
  23.                
  24.                 if(abs(curr_diff) < curr_best_diff){
  25.                     curr_best_diff = abs(curr_diff);
  26.                     curr_best_solution = curr_solution;
  27.                 }
  28.  
  29.                 if(curr_diff == 0){
  30.                     break;
  31.                 }
  32.  
  33.                 ref.push(level + 1);
  34.             }
  35.            
  36.             ++level;
  37.         } else {
  38.             curr_diff += 2 * players[level - 1].score;
  39.             curr_score -= players[level - 1].score;
  40.            
  41.             if(not curr_solution.empty()){
  42.                 curr_solution.pop_back();
  43.             }
  44.  
  45.             level = ref.top();
  46.             ref.pop();
  47.         }
  48.     }
  49.  
  50.     return curr_best_solution;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement