Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Чат
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 

Годовой баланс

(Время: 1 сек. Память: 16 Мб Сложность: 33%)

Для того, чтобы значение a-b было максимально, необходимо из a получить максимально возможное число, а из b, наоборот, определить наименьшее. Если число неотрицательно, то для получения минимума цифры сортируются в порядке неубывания, а при вычислении максимума, соответственно, в порядке невозрастания. Для отрицательных чисел ситуация с сортировкой цифр меняется с точностью до наоборот. Причем, нужно заметить, что при сортировке цифр по возрастанию нужно избежать момента, где пришлось бы поставить 0 на первое место (этого можно достичь, например, при сортировке пузырьком, если при сравнении первых двух соседних элементов не менять их в том случае, когда второй - это ноль).

Сортировку цифр в числе проще проводить, если преобразовать само число в строку, и работать с обычным массивом символов. Причем, знак "-" не обязательно включать в этот массив. Отсортировав его, например пузырьком, можно сделать обратное преобразование строки в число. После нахождения максимального a и минимального b останется просто вывести значение a-b.

Для хранения чисел можно использовать обычный 4-байтовый целый тип (long или longint например), т.к. результат вычислений не может превзойти значения 1999999998 по абсолютной величине. Если бы ограничения на a и b были не до миллиарда, а до двух миллиардов, то итоговая разница могла бы достигать значения, большего 19 миллиардов, где пришлось бы использовать такие 8-байтовые целые типы как int64 или __int64.


[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2017, ICQ: 151483