[Logo] Форум DL
  [DL]  Back to home page 
Forum Index ->Олимпиадное программирование ->Обсуждение Sphere-задач
Author Message
Igor Belyaev

Topics: 2
Messages: 4

My Profile
Господа, всем привет!

На текущий момент я не зачел эту задачу, поэтому прошу помочь найти ошибку.
Сначала пару слов об идее решения:

1) разделим текущую строку(храним исходное число в массиве char) на две - левая подстрока Ls и правая подстрока Rs. Если длина текущей строки четна, то с границей проблем не возникает, если же длина нечетна, тогда центральный символ являеется концом строки Ls и началом строки Rs.
2) Теперь можно сделать вывод, что результирующая строка будет начинаться либо со строки Ls, либо со строки Ls+1.
2.2) Если rev(Ls)>Rs , то копируем rev(Ls) в Rs и получаем ответ. Примеры: 3102->3113, 12320->12321.
2.3) Если rev(Ls)<=Rs, но наша задача сводится к тому, чтобы увеличить Ls на наименьшее значение, т.е. на 1. Затем копируем rev(Ls+1) в Rs и вот собственно и все. Примеры: 3113->3223, 31914->32023.

3) Есть скользкий момент, когда все цифирки равны 9, тогда идеалогия остается та же, только изменяется длина строки. Пример: 999->1001.

Это все что касается идеалогии.
Вот здесь можно найти мое решение.
Так же вот некоторые тесты на эту задачу в формате input - output:

1 - 2
9 - 11
21 - 22
22 - 33
23- 33
77 - 88
99 - 101
100 - 101
101 - 111
147 - 151
13730 - 13731
13731 - 13831
13732 - 13831

ОЧЕНЬ расчитываю на вашу помощь. Заранее спасибо!
 
Forum Index ->Олимпиадное программирование ->Обсуждение Sphere-задач
Time:0,031