Задача C в первом раунде Russian Code Cup была скорее математической, чем программистской, поэтому получить WA #3 по ней было вдвойне неприятно и обидно. Решение задачи сводилось к тому, чтобы вывести двойку, возведенную в определенную степень. Несколько раз прочесав весь код и перепроверив корректность доказательства, бага в решении мне найти не удалось. В конце концов единственное, что пришло мне в голову — это заменить вызов функции pow(2, ...)
на pow(2ll, ...)
(функция long long pow(long long a, long long b)
возвращала (a ^ b) % 1000000007)
. Казалось бы, аргументы функции все равно имеют тип long long, поэтому эта двойка должна была так или иначе к long long'у привестись. Каково же было мое удивление, когда новая посылка получила accepted! На контесте ни времени, ни желания разбираться не было, а сегодня я послал в тренировку на Codeforces два решения, отличающиеся только в вызове функции pow от аргумента 2 или 2ll соответственно (на контесте я делал в программе ещё какие-то изменения и это теоретически могло как-то повлиять на результат). Решения все так же получили разные вердикты:
Полное решение: 3553225
WA #3: 3553222
Собственно, вопрос: почему две программы ведут себя по-разному?
UPD. Вопрос закрыт