fork download
  1. #include<iostream>
  2. using namespace std;
  3. #define MAX 1000000000000000000
  4. int main()
  5. {
  6. long long a, b, x;
  7. cin >> a >> b >> x; // ввод переменных
  8.  
  9. if (!x) return (cout << 0 << endl, 0); // проверяем, не равен ли x 0(тогда не нужно совершать никаких прыжков)
  10.  
  11. if(a+b==0) if(x==a) return(cout << a << endl,0); // так же проверяем не будет ли суммой дистанций прыжков 0,
  12. // если будет, то проверяем, можно ли за первый прыжок добраться до точки x
  13.  
  14. long long possible_ans1 = MAX, possible_ans2 = MAX; // объявляем две переменные, соответветствующие двум способам добраться до точки x
  15.  
  16. if (!((x - a) % (a + b)))// проверяем первый способ, если можно добраться за n(a+b) + a прыжков, где n - количество совершенных прыжков
  17. possible_ans1 = ((x - a) / (a + b)) * (abs(a) + abs(b)) + abs(a);
  18.  
  19. if (!(x % (a + b))) // проверяем второй способ, если до x можно добраться n(a+b) прыжков
  20. possible_ans2 = x / (a + b) * (abs(a) + abs(b));
  21.  
  22. // если невозможно добраться каким-либо из способов, то присваиваем соответствующей переменной значение MAX
  23. if (possible_ans1 < 0)
  24. possible_ans1 = MAX;
  25. if (possible_ans2 < 0)
  26. possible_ans2 = MAX;
  27.  
  28. if (possible_ans1 == MAX && possible_ans2 == MAX) // если невозможно добраться никаким из способов, то выводим -1, в отличном случае
  29. return (cout << -1 << endl, 0); // выводим минимум из возможных ответов
  30. cout << min(possible_ans1, possible_ans2) << endl;
  31. return 0;
  32. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
0