Pascal ABC

 

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

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

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

Шифр Цезаря

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

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

Простые

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

Скобки

 

Уравнение

 

Вирусы

 

КВН

 

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

 

Степень

 

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

 

Пуговицы

 

A to B

 

Палиндромы

 

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

 

Виза

 

Ездец

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

MIME64

 

Куль хацкеры

 

Редкое имя

 

Города

 

Исправления

 

Банки

 

2^n

 

Ниточка

 

Массивище

 

Знакомые

 

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

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

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

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

Анаграммы

Треугольник

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

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

Конфуз

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

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

Агенты

Игра в слова

Сложные

Диски

Домино

Монеты

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

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

Робот-сапер

Квадраты

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

Оппозиция

 

Замок

 

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

 

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

 

Дождик

 

Черепаха

 

Метро

 

Террористы

 

Школы

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

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

 

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

 

Телеметрия

 

Лесной пожар

 

Олимпиада

 

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

 

 Кубики

 

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

 

Автобус

 

 

 

 

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

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

Задача 42:  Игра в слова (II открытая Кировская командная олимпиада)

Надеемся, что вам знакома следующая игра. Выбирается слово и из его букв составляются другие осмысленные слова, при этом каждая из букв исходного слова может быть использована не более такого количества раз, которое она в нем встречается.

Напишите программу, помогающую играть в эту игру.

Входные данные
В первой строке входного файла записано выбранное для игры слово. В последующих строках задан "словарь" - множество слов, которые мы считаем осмысленными. Их количество не превышает 1000. Слово - это последовательность не более чем 255 маленьких латинских букв. Каждое слово записано в отдельной строке. Заканчивается словарь словом "ZZZZZZ" (состоящим из заглавных букв), которое мы не будем считать осмысленным. Слова в словаре, как это ни странно, не обязательно располагаются в алфавитном порядке.

Выходные данные
В выходной файл необходимо выдать список слов, которые можно получить из исходного слова. Слова должны быть выданы в том же порядке, в котором они встречаются в словаре. Каждое слово должно быть записано в отдельной строке. Список слов должен заканчиваться все тем же неосмысленным словом "ZZZZZZ".

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

C.IN

soundblaster
sound
sound
blaster
soundblaster
master
last
task
sos
test
bonus
done
ZZZZZZ

C.OUT

sound
sound
blaster
soundblaster
last
sos
bonus
done
ZZZZZZ

C.IN

windowsmustdie
summer
informatics
school
rules
olympiadisstarting
goodbymylovegoodby
exit
ZZZZZZ

C.OUT

ZZZZZZ

Решение:
Мы уже решали подобную задачку (Анаграммы).
Создадим два массива от a до z, в которых будем хранить, сколько раз встречается та или иная буква в слове. Первый массив отдадим на первое слово, а второй будем заполнять очередным проверяемым словом. Первоначально инициализируем первый массив нулями и пройдем по первому слову от начала до конца. Если в слове встретилась какая-то буква, то увеличим соответствующей ей элемент на 1.
Затем, заведем цикл repeat - until, условием выхода из которого будет прочтение строки ZZZZZZ. Если строка не равна ZZZZZZ, то инициализируем второй массив нулями, а затем также для всех букв этого слова будем увеличить соответствующие элементы второго массива. Теперь сравним все элементы от a до z в обоих массивах. Любой элемент первого массива должен быть не меньше элемента второго массива (иначе получилось бы, что мы использовали при составлении слова букву, которой нет в данном слове, или использовали больше букв, чем есть).

Далее ð

 
 

СЕРВИС

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