|
Годовой баланс
(Время: 1 сек. Память: 16 Мб Сложность: 35%)
Для того, чтобы значение a-b было максимально, необходимо из a получить максимально возможное число, а из b, наоборот, определить наименьшее. Если число неотрицательно, то для получения минимума цифры сортируются в порядке неубывания, а при вычислении максимума, соответственно, в порядке невозрастания. Для отрицательных чисел ситуация с сортировкой цифр меняется с точностью до наоборот. Причем, нужно заметить, что при сортировке цифр по возрастанию нужно избежать момента, где пришлось бы поставить 0 на первое место (этого можно достичь, например, при сортировке пузырьком, если при сравнении первых двух соседних элементов не менять их в том случае, когда второй - это ноль).
Сортировку цифр в числе проще проводить, если преобразовать само число в строку, и работать с обычным массивом символов. Причем, знак "-" не обязательно включать в этот массив. Отсортировав его, например пузырьком, можно сделать обратное преобразование строки в число. После нахождения максимального a и минимального b останется просто вывести значение a-b.
Для хранения чисел можно использовать обычный 4-байтовый целый тип (long или longint например), т.к. результат вычислений не может превзойти значения 1999999998 по абсолютной величине. Если бы ограничения на a и b были не до миллиарда, а до двух миллиардов, то итоговая разница могла бы достигать значения, большего 19 миллиардов, где пришлось бы использовать такие 8-байтовые целые типы как int64 или __int64.
| |