Блог пользователя e-maxx

Автор e-maxx, 14 лет назад, По-русски

Разбор задачи "A. Бухгалтерский учёт"

Первый способ решения: перебор

Переберём все возможные X, и проверим каждое, подходит ли оно под указанные A и B. Понятно, что имеет смысл перебирать только в тех же пределах, которыми ограничены сами A и B, т.е. от -1000 до 1000 (легко понять, что сузить эти рамки никак нельзя - для любого числа от -1000 до 1000 найдётся соответствующий тест). При фиксированном X проверять ответ надо было, n раз производя умножения, но аккуратно следя за тем, чтобы переменная не переполнилась (на что многие попадали), например, прекращая умножать, если текущее произведение уже вылезло за пределы [ - 1000;1000].

Второй способ решения: формула

Легко заметить, что если ответ есть, то это корень n-ой степени из отношения |B| и |A|, возможно, с изменённым знаком, - если A и B имеют разный знак, и n нечётно (если n чётно, то в этом случае, очевидно, ответа не будет). Поэтому можно было просто воспользоваться функцией возведения числа в степень (возводить надо было в 1 / n-ю степень), которая есть во многих языках, и проверить, что получилось целое число (разумеется, с учётом точности, - например, что оно отличается от ближайшего целого не более чем на 10 - 9).

Но здесь надо быть аккуратным со всякими нулями. Плохо, когда A = 0, и этот случай надо разобрать отдельно (B = 0 или B ≠ 0).


Вообще очень многие ошибались на тесте с A = 0 или B = 0, и если бы такие тесты не содержались в претестах, то, наверное, у половины людей задача бы упала :)

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится