Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3.  
  4. int main(int argc, const char *argv[]) {
  5. int n, p, q, nHits = 0, hp;
  6. std::array<int, 200000> indexToHp;
  7.  
  8. std::cin >> n >> p >> q;
  9. int max = 0;
  10. int maxpos;
  11. int min = 1000000001;
  12. int minpos;
  13. for (int i = 0; i < n; i++) {
  14. std::cin >> hp;
  15. if (hp > max) {
  16. max = hp;
  17. maxpos = i;
  18. }
  19. if (hp < min && hp > 0) {
  20. min = hp;
  21. minpos = i;
  22. }
  23. indexToHp[i] = hp;
  24. }
  25. while(max != 0) {
  26. nHits++;
  27. if(p >= q) {
  28. indexToHp[maxpos] = indexToHp[maxpos] - p + q;
  29. max = 0;
  30. for(auto it = indexToHp.begin(); it != indexToHp.end(); it++) {
  31. (*it) -= q;
  32. if((*it) > max) {
  33. max = (*it);
  34. maxpos = it - indexToHp.begin();
  35. }
  36. if ((*it) < min && (*it) > 0) {
  37. min = (*it);
  38. minpos = it - indexToHp.begin();
  39. }
  40. if ((*it) < 0) (*it) = 0;
  41. }
  42. }
  43. else {
  44. indexToHp[minpos] = indexToHp[minpos] - p + q;
  45. min = 0;
  46. for(auto it = indexToHp.begin(); it != indexToHp.end(); it++) {
  47. (*it) -= q;
  48. if((*it) > max) {
  49. max = (*it);
  50. maxpos = it - indexToHp.begin();
  51. }
  52. if ((*it) < min && (*it) > 0) {
  53. min = (*it);
  54. minpos = it - indexToHp.begin();
  55. }
  56. if ((*it) < 0) (*it) = 0;
  57. }
  58. }
  59. }
  60. std::cout << nHits << std::endl;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement