Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- int main(int argc, const char *argv[]) {
- int n, p, q, nHits = 0, hp;
- std::array<int, 200000> indexToHp;
- std::cin >> n >> p >> q;
- int max = 0;
- int maxpos;
- int min = 1000000001;
- int minpos;
- for (int i = 0; i < n; i++) {
- std::cin >> hp;
- if (hp > max) {
- max = hp;
- maxpos = i;
- }
- if (hp < min && hp > 0) {
- min = hp;
- minpos = i;
- }
- indexToHp[i] = hp;
- }
- while(max != 0) {
- nHits++;
- if(p >= q) {
- indexToHp[maxpos] = indexToHp[maxpos] - p + q;
- max = 0;
- for(auto it = indexToHp.begin(); it != indexToHp.end(); it++) {
- (*it) -= q;
- if((*it) > max) {
- max = (*it);
- maxpos = it - indexToHp.begin();
- }
- if ((*it) < min && (*it) > 0) {
- min = (*it);
- minpos = it - indexToHp.begin();
- }
- if ((*it) < 0) (*it) = 0;
- }
- }
- else {
- indexToHp[minpos] = indexToHp[minpos] - p + q;
- min = 0;
- for(auto it = indexToHp.begin(); it != indexToHp.end(); it++) {
- (*it) -= q;
- if((*it) > max) {
- max = (*it);
- maxpos = it - indexToHp.begin();
- }
- if ((*it) < min && (*it) > 0) {
- min = (*it);
- minpos = it - indexToHp.begin();
- }
- if ((*it) < 0) (*it) = 0;
- }
- }
- }
- std::cout << nHits << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement