Задача для начинающих
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Доброго времени суток!
Я тут было зашел на Timus Online Judge :), гляжу, а там Череп и porshe задачи решают ;)
Думаю, решу и я, простенькую, для начинающих...
Но наверное, я что-то не понял :(( и где-то туплю.
Задача здесь, мои логические суждения и код прилагаются.
А именно:
1. Входной поток <= 256 КБ;
2. Создаю массив значений типа double размером 256000 / 8 = 32000;
Ну а дальше все проще простого, как мне показалось...
3. Читаем из потока в переменную типа unsigned long long для цифр 10^18, нахожу корень и присваиваю элементам массива;
4. Вывожу значения массива в обратном порядке.
У меня все работает.
Вердикт Timus — Wrong answer.
ВОПРОС: Где же я туплю? :)
256kB
это не 256000 байт, а256 * 1024 = 262144
, так как в одном КБ не 1000 байт, а 1024.Вот тут, мне кажется, ошибка:
По-моему, правильней будет так:
И вообще, тут можно неплохо использовать
vector
.С этой задачкой я вообще не стал мудрствовать:
Оно, конечно неоптимально, но вполне удовлетворительно (на вкус timus'а).
А твой вариант проходит в следующей редакции:
Фраза
видимо подразумевает полный размер входного потока, т.е. поток чисел может состоять из однозначных (1 байт) чисел плюс разделитель (+1 байт).
С входным потоком понятно, а почему при объявлении массива
double arr[131072];
вmain()
— вердикт Stack overflow, а если его объявить глобально, то код проходит?
Ну естественно! Память для массива, который объявляется внутри функции (любой), выделяется из стека. А стек — не резиновый. (Посмотри на Timus'е — там где-то указан размер стека по умолчанию и директива для его увеличения.)
Если массив объявлен глобально, то память под него выделяется статически в сегменте данных при загрузке программы.
Но, даже если стек увеличивать директивой компилятора (точнее, линкера), то это плохая практика. Большие массивы лучше выделять либо статически, либо из кучи.