Pascal ABC

 

ГЛАВНАЯ
ССЫЛКИ
ОЛИМПИАДНЫЕ ЗАДАНИЯ
Очень простые

Проблема с A и B

Трамвайные билеты

Шифр Цезаря

Четные и нечетные члены последовательности

"Мы вас упакуем!"

Простые

Равновеликие прямоугольники

Скобки

 

Уравнение

 

Вирусы

 

КВН

 

Коррекция кода

 

Степень

 

Демократия в опасности

 

Пуговицы

 

A to B

 

Палиндромы

 

Почти Крэг Туми

 

Виза

 

Ездец

 
Средней сложности  

MIME64

 

Куль хацкеры

 

Редкое имя

 

Города

 

Исправления

 

Банки

 

2^n

 

Ниточка

 

Массивище

 

Знакомые

 

Считаем кораблики

Лошадью ходи!

Левые повороты

Прицельное метание помидор

Анаграммы

Треугольник

Принцип компании

Уникальная строка

Конфуз

K-ичные числа

Михаил Густокашин против бюрократии

Агенты

Игра в слова

Сложные

Диски

Домино

Монеты

Программистика

Хитрющая строка

Робот-сапер

Квадраты

Упаковка простых

Оппозиция

 

Замок

 

Многоугольники

 

Электронные часы

 

Дождик

 

Черепаха

 

Метро

 

Террористы

 

Школы

 
Очень сложные/особо интересные  

Система Защиты

 

Бизнес-классики

 

Телеметрия

 

Лесной пожар

 

Олимпиада

 

Автобусный диспетчер

 

 Кубики

 

Электронная почта

 

Автобус

 

 

 

 

ОЛИМПИАДНЫЕ ЗАДАНИЯ

Олимпиадные задачи с рекомендациями к решениям

Задача 28: Массивище

М. Густокашин

Во входном файле, через пробел даны числа A1, A2 ... An. Отсортировать эти числа по неубыванию и вывести отсортированный массив в выходной файл.
Входные данные
В первой строке входного файла дано число n (1<=n<=200000). Во второй строке через пробел записаны числа A1, A2 ... An (-15000<=A<=15000).
Выходные данные
В единственной строке выходного файла должен быть отсортированный массив.

Пример входного файла
4
4 3 1 2

Пример выходного файла
1 2 3 4

Решение:
Это первая разобранная на сайте задача, условие которой я придумал сам! Итак, никакими стандартными средствами нам этот массив отсортировать не удастся. Сортировка слиянием, использование динамической памяти тоже не помогут (хотя кто их знает - сам не пробовал).
Идея состоит в том, что необходимо создать массив из элементов word размерностью от -15000 до 15000, изначально инициализированный нулями. При появлении очередного числа увеличиваем элемент массива с номером, равным этому числу на 1. При выводе просто проходим массив от -15000 до 15000 и выводим число, равное номеру массива столько раз, какое значение храниться в элементе с этим номером.

В этом решении есть ошибка. То есть не то что ошибка, а недоделка. А что если какое то число встречается больше 65537 раз. Тогда произойдет переполнение переменной word и восстановить массив станет невозможно! Чтобы избавиться от этой проблемы надо завести массив из 3 элементов integer, в которых будут храниться указатели на переполнившейся элемент массива. Переделать вывод результатов с использованием этого массива - задача несложная, поэтому здесь рассматриваться не будет ;)
 

Далее ð





 


 

 

 
 

СЕРВИС

Copyright © 2008 СОШ №2 им. Н.П. Массонова г.Свислочь © Синица А.А.