fork(3) download
  1. #include<iostream>
  2. #include<cassert>
  3. #include<vector>
  4. using namespace std;
  5.  
  6. int solve(vector<int> v) {
  7. vector<int> overhead(2,0);
  8. int num_of_moves = 0, sum = 0;
  9. for(int i = 0; i < v.size(); i++) {
  10. num_of_moves += overhead[i % 2];
  11. int left = abs(v[i]);
  12. if((sum > 0 && v[i] < 0) || (sum < 0 && v[i] > 0)) {
  13. int used = min(abs(sum), abs(v[i]));
  14. int diff = min(overhead[(i + 1) % 2], used);
  15. overhead[(i + 1) % 2] -= diff;
  16. overhead[i % 2] -= min(overhead[i % 2], (used - diff));
  17. left -= used;
  18. }
  19. sum += v[i];
  20. overhead[(i + 1) % 2] += abs(left);
  21. }
  22.  
  23. assert(sum == 0);
  24. return num_of_moves;
  25. }
  26.  
  27. int main() {
  28. cout << solve({-8,-5,0,-3,8,8,2,-2}) << '\n';
  29. cout << solve({-1, -1, 0, 1, 1}) << '\n';
  30. cout << solve({-6, 16, 0, -10});
  31. }
  32.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
31
3
16