Задания первой Московской олимпиады по программированию (1980 г.)

Я вот тут раскопал любопытную книжицу. В ней - олимпийские задания по программированию за 8 первых Московских олимпиад.

Это значит меня из школы куда-то отправляли и готовился я по этой книге. Году этак в 94-ом, если интересно.

В общем, есть алгоритмы и решения на Бейсике, Паскале, Си и Фортране. Так что желающим примериться к мерке 80-го года - добро пожаловать.

Задания первой Московской олимпиады по программированию (1980 г.) Программирование, Задача, Олимпиада, 1980, Длиннопост
Задания первой Московской олимпиады по программированию (1980 г.) Программирование, Задача, Олимпиада, 1980, Длиннопост
Вы смотрите срез комментариев. Показать все
4
Автор поста оценил этот комментарий

Интересно последнее задание. Новый массив не заводить.. А можно, я напишу цикл от 1 до n и заведу 3 переменных. пройду в цикле по всем элементам массива и посчитаю, сколько у меня нулей, единиц и двоек. А потом еще раз цикл от 1 до n где каддому элементу сначала присваиваю i нулей, потом j единиц, а потом k двоек. Такое решение считается?

раскрыть ветку (8)
Автор поста оценил этот комментарий

Заводим три переменные. В одной считаем нули, в другой единицы, в третьей двойки. Все.

Автор поста оценил этот комментарий
интересное решение, но я думаю, что там хотят реализацию quick sort
раскрыть ветку (3)
5
Автор поста оценил этот комментарий

как раз counting sort быстрее и эффективней в данном случае


https://en.wikipedia.org/wiki/Counting_sort

раскрыть ветку (2)
Автор поста оценил этот комментарий
Быстрее чем идти от нуля до н, где нули будут переставляться в начало, а двойки в конец уменьшая н?
раскрыть ветку (1)
Автор поста оценил этот комментарий

сложность алгоритмов одинаковая (линейная), сортировка подсчетом проще в реализации и работает в других случаях, когда количество уникальных значений больше трех

2
Автор поста оценил этот комментарий

Да, конечно, это самое эффективное решение поставленной задачи, сортировка подсчётом (counting sort).

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Если мне память не изменяет, то она требует нескольких проходов по массиву. Но данная задача решается в один проход. Или я ошибаюсь?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, всё верно. Возможно, я был не прав на счёт «самый эффективный», не уверен. Дело в том, что сортировка подсчётом - два прохода, но dutch flag algorithm - один проход, но больше сравнений и есть swap. Скорее всего, примерно одинаково, если массив - действительно просто числа.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку