Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. std::vector<size_t> Solve(std::vector<Player>& players) {
  2. std::sort(players.begin(), players.end(), CompareBySkill());
  3. size_t left = 0;
  4. size_t right = 1;
  5.  
  6. size_t curr_best_left = 0;
  7. size_t curr_best_right = 0;
  8. uint64_t curr_sum = players[0].skill;
  9. uint64_t best_sum = curr_sum;
  10.  
  11. while (right < players.size()) {
  12. curr_sum += players[right].skill;
  13. while ((left < right - 1) &&
  14. (static_cast<uint64_t>(players[left].skill) + players[left + 1].skill <
  15. static_cast<uint64_t>(players[right].skill))) {
  16. curr_sum -= players[left].skill;
  17. left++;
  18. }
  19. if (curr_sum > best_sum) {
  20. best_sum = curr_sum;
  21. curr_best_left = left;
  22. curr_best_right = right;
  23. }
  24.  
  25. right++;
  26. }
  27.  
  28. std::cout << best_sum << "\n";
  29.  
  30. std::vector<size_t> answer(curr_best_right - curr_best_left + 1);
  31. for (size_t i = curr_best_left; i <= curr_best_right; ++i) {
  32. answer[i - curr_best_left] = players[i].index;
  33. }
  34. std::sort(answer.begin(), answer.end());
  35.  
  36. return answer;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement