Блог пользователя Copymaster

Автор Copymaster, 11 лет назад, По-русски

Задача 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

http://pastebin.com/XbnmRAis

WA #3: 3553222

http://pastebin.com/pF7UVj17

Собственно, вопрос: почему две программы ведут себя по-разному?

UPD. Вопрос закрыт

Полный текст и комментарии »

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