e-olymp 131. Слова

Задача
Из слова «молоко» можно составить слово «коло». Сколько слов из заданного словаря можно составить, используя буквы заданного слова, причем каждую букву можно использовать не более одного раза.

Тесты

Входные данные Выходные данные
молоко
4
мило
коло
коліно
око
2
приветствие
8
ветер
треск
спирт
трепет
перерыв
север
текст
привести
5

Код программы на С++

Код программы на Java

Решение
Создаем вектор [latex]D[/latex], в котором будем хранить количество каждого символа в слове, и обнуляем его. Тип [latex]char[/latex] вмещает максимум [latex]256[/latex] значений (в диапазоне от [latex]-127[/latex] до [latex]126[/latex]). Класс [latex]string[/latex] состоит из символов типа [latex]char[/latex], поэтому для того, чтобы «вернуть» значения этих символов к положительным (в чём возникает необходимость при обращении к элементам вектора), к ним прибавляется [latex]127[/latex].
Потом считаем число каждого символа в слове. Создаем переменную, в которой будем хранить число слов из словаря, которое можно составить, используя символ первого входного слова. Предполагаем, что слово [latex]words[/latex] составить можно ([latex]words=true[/latex]). Считаем использованные символы из первой входной строки и, если вдруг число стало отрицательным, то слово составить нельзя, обнуляем переменную [latex]words[/latex] и останавливаем цикл. К переменной [latex]rez[/latex] прибавляем переменную [latex]words[/latex] и выводим [latex]rez[/latex].

Ссылки
Код на ideone.com (C++)
Код на ideone.com (Java)
Задача с сайта e-olymp.com.
Засчитанное решение.

Related Images:

6 thoughts on “e-olymp 131. Слова

  1. — Пояснительный текст нуждается в улучшении. Как понимать «Потом считываем число каждого символа в слове»? Вы не считываете чисел, кроме размера словаря.
    — Что это за магическое число 256 по всей программе? Нужно объяснить.
    — bool words = 1; Так лучше не делать. Если уж переменная логическая, то используйте true или false.

    • Я просил «Что это за магическое число 256 по всей программе? Нужно объяснить.»
      Вы написали «Тип char вмещает в себе максимальное значение 256.»
      Кроме того, что это неправда, это еще и не объясняет почему Вы завели массив на 512 элементов и почему добавляете 256 к коду букв.
      Мне понятно, что Вы боритесь с символами кириллицы, но Вы этого не поясняете.

Добавить комментарий