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

Автор I_love_Varechka, история, 9 лет назад, По-русски

Всем доброго времени суток!

Встретил задачу, уже второй день ломаю голову над ошибкой в коде...

Дано целое число (0<число<10^1000000), нужно найти целое число > данного, которое является палиндромом.

Буду рад идее решения, а еще больше рад крутым тестам.

Буду очень благодарен за помощь!

UPD Минимальное целое число.

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

»
9 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится

11111111111111111111111111111111111 всегда подходит

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +21 Проголосовать: не нравится

    Не всегда, контрпример: 111111111111111111111111111111111111111111111111111111

»
9 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится

Кажется O(nlog(n)) не заходит да?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    n=len(число)? Если да, то заходит.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    тут вроде за O(n) можно. Если автор скинет где можно потестить, то скажу точно

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

Эта задача была на окружном этапе 2013 года в Москве. Её решение очень простое:
1) Отражаем левую половину числа (Если было число 432562, то получается 432234)
2) Сравниваем с введенным, если полученное отражением число меньше или равно введенному, его надо увеличить.
3) Увеличиваем следующим образом — надо к левой половине прибавить 1 и еще раз отразить. Например если наше отраженное число равно 1234321, то его левая половина 1234, получаем 1235, отражаем 1235321. Для четный длины тоже самое 123321, левая половина 123, получаем 124, отражаем 124421. Если было что-то вида 12921, получаем 13031 (129 + 1 = 130)
4) Но это не все решение задачи, есть мерзкий случай, одни 9. Например 999, но из таких чисел очень очевидно как получать следующий палиндром.
Удачи в написании!

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +15 Проголосовать: не нравится

http://paste.ubuntu.com/12907459/

Ставьте +ПЛЮС+, добавляйте в друзья, следити за моим блогом

»
7 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Попробуй через стринг. Здесь тип как длинная арифметика.