fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int n;
  7. cin >> n; // 5
  8.  
  9. int b[n+1]; // 1-based indexing
  10. for(int i = 1; i <= n; i++)
  11. {
  12. // index 1 2 3 4 5
  13. cin >> b[i]; // 3 6 2 3 5
  14. }
  15.  
  16. int start = 1;
  17. int end = n;
  18.  
  19. bool reversed = false; // Initially, no reversal // In starting no Number is reversed so we declare it as false
  20. int turn = 0;
  21. int p1 = 0;
  22. int p2 = 0;
  23. int selected = 0;
  24.  
  25. while(start <= end)
  26. {
  27. if(turn % 2 == 0) // p1's turn
  28. {
  29. //Iteration 1 :
  30. // 1st element we consider p1
  31. // if(3 % 2 == 0) // zero remainder not coming so it is false becoz odd number is coming
  32. // if(reversed == false)
  33. // p1 = p1 + b[1]
  34. //selected = b[1]
  35. //start++
  36.  
  37. // Iteration 3: Now the array is -> 5, 3 , 2
  38. // 3rd element we consider p1
  39. // if(5 % 2 == 0) // zero remainder not coming so it is false becoz odd number
  40. // if(reversed == false)
  41. // p1 = p1 + b[3]
  42. // selected = b[3]
  43. // start++
  44.  
  45. // Iteration 5 : Now the array is -> 2
  46. // 5th Element we consider p1
  47. // if( 2 % 2 == 0) // zero remainder has came so it even number came it is true but the it is the last number so we cant reverse the operation
  48. // here we stop the iteration and print the answer
  49.  
  50. // 3 + 5 + 2 = total -> 10
  51.  
  52. if(reversed == false) // Initially, no reversal // In starting no Number is reversed so we declare it as false
  53. {
  54. p1 = p1 + b[start];
  55. selected = b[start];
  56. start++;
  57. }
  58. else
  59. {
  60. p1 = p1 + b[end];
  61. selected = b[end];
  62. end--;
  63. }
  64. }
  65. else // p2's turn
  66. {
  67. // Iteration 2: Now the array becomes 6 , 2 , 3 , 5
  68. // 2nd Element we consider 6 as p2
  69. // if(6 % 2 == 0) // Now zero remainder has came so it becomes true even number has come 6
  70. //if(reversed == true)
  71. // 6 = 6 + b[2]
  72. // selected = b[2]
  73. // start++
  74.  
  75. //Iteration 4: Now the array becomes -> 3 , 2
  76. // 4th Element we consider 3 as p2
  77. // if( 3 % 2 == 0) // Now zero remainder has not came so it becomes false it means odd number there
  78. // if(reversed == false)
  79. // 3 = 3 + b[4]
  80. // selected = b[4]
  81. //start++
  82.  
  83. // 6 + 3 = total -> 9
  84. if(reversed == false) // Initially, no reversal // In starting no Number is reversed so we declare it as false
  85. {
  86. p2 = p2 + b[start];
  87. selected = b[start];
  88. start++;
  89. }
  90. else
  91. {
  92. p2 = p2 + b[end];
  93. selected = b[end];
  94. end--;
  95. }
  96. }
  97.  
  98. // Iteration 2: Even number has occured 6 , 2 , 3 , 5
  99. // remove 6 and reverse the array -> 5 , 3 , 2
  100. if(selected % 2 == 0) // Reverse the direction if the selected number is even
  101. {
  102. reversed = !reversed;
  103. }
  104.  
  105. turn++;
  106. }
  107.  
  108. cout << "p1 -> "<< p1 <<endl;
  109. cout<<"p2 -> "<<p2 <<endl;
  110. cout<<"p1 - p2 -> "<<p1-p2;
  111. }
  112.  
Success #stdin #stdout 0s 5300KB
stdin
Standard input is empty
stdout
p1 -> 393193290
p2 -> 917303852
p1 - p2 ->  -524110562