|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.09.2013, 00:50 | #11 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Код:
Вот я снова чуть-чуть доработал код.. и.. ошибок больше нет, но проходит только 4 теста Попытаюсь чуть-чуть объяснить соль моего решения.. : <...> Возьмем 1-ый символ строки, посмотрим кол-во слов на этот 1-ый символ и выпишем эти слова. (строка "1123", словарь "1", "11", "12", "3"). Получаем массив 1,11, 12. Возьмем 2-ой символ и выпишем для него в том и только в том случаем, если его место не занято им самим же.. Возьмем i-тый символ. Если он один словаре, то просто прибавим его к каждой строке, иначе скопируем массив N раз (N = кол-во слов в словаре, начинающихся на эту букву) и заполним одну часть 1-ым вариант, 2-ую часть 2-ым.. N -ую часть - N-ыи вариантов.. Символы закончились, хорошо.. Теперь посмотрим какая из полученных строк без пробелов является исходной и выведем её.. Вуаля! (ну несщитая 8 заваленных тестов, всё очень даже не плохо..) |
21.09.2013, 21:11 | #12 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Не было времени раньше написать.
После словесного объяснения стало понятнее, но все равно не могу понять до конца весь код. Могу отметить только огромное потребление памяти. Давайте-ка напишу словесное описание своего алгоритма: В массиве c хранятся номера первых слов словаря, начинающихся на букву-индекс массива или -1. В массиве b окажутся номера слов, из которых состоит предложение. Сам разбор происходит так: 1) ищем следующее слово для массива b - если в массиве b еще не было слова, то берем букву по текущей позиции и по ней определяем номер первого слова, начинающегося на эту букву, а если уже были варианты слов, то переходим к следующему слову по словарю; 2) проверка - нашли ли слово по первой букве или перешли ли к слову, у которого первая буква не совпадает с текущей (перебрали все подходящие слова): Если не нашли по первой букве или перешли к неподходящему слову, то нужно вернуться на шаг назад и попробовать подобрать другое слово на нем Если нашли слово по первой букве или перешли к слову, у которого первая буква совпадает, то сравниваем само слово и кусок исходного предложения нужной длины (находится ли там это слово с текущей позиции) - если подошло слово, то передвигаем текущую позицию на длину слова, фиксируем номер слова в массиве b
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
21.09.2013, 21:24 | #13 | |||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Цитата:
Цитата:
Думаю тебе не очень ясно только Solution.. Код:
Цитата:
|
|||
22.09.2013, 00:51 | #14 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Код:
Никак не пойму до конца Ваш алгоритм. Чуть подправил: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 22.09.2013 в 01:08. |
22.09.2013, 12:17 | #15 | |||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Цитата:
Код:
4 332 332 221 33 332 221 332 33 221 33 33 221 Для продолжения нажмите любую клавишу . . . Как видите, среди них нет нужного.. Цитата:
Хотя пример (см. выше) без этой строки программка заваливает.. Цитата:
|
|||
22.09.2013, 19:15 | #16 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
7 тестов:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
22.09.2013, 19:49 | #17 | ||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Цитата:
Цитата:
|
||
03.10.2013, 09:20 | #18 |
Регистрация: 16.08.2013
Сообщений: 6
|
Всем спасибо за ответы) Разбираюсь в вариантах проги.
Сама попробовала так решить: Код HTML:
program slovar515; var i,j,N: integer; s1,s3:string[100]; Type slova=array [1..100] of string; var s2: slova; begin readln(s1); readln(N); s3:=''; j:=1; for i:=1 to N do readln(s2[i]); i:=1; for i:=1 to length(s1) do for j:=1 to N do if (copy(s1,i,length(s2[j])) = s2[j]) then begin s3:=s3 + s2[j]+ ' ' ; i:=i+length(s2[j])-1; end; writeln(s3); end. |
03.10.2013, 15:10 | #19 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
AnutaPr, у Вас пока не учитывается случай:
мамамылапол при словаре: мама мыл мыла пол разбор сделает "мама мыл", а "апол" не найдет в словаре Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
03.10.2013, 20:40 | #20 |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
Было немного лишнего времени, решил попробовать себя. Итог 7/12. Вот код:
Код:
Последний раз редактировалось Kix.IV; 04.10.2013 в 11:17. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
словарь | ssdo | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 29.11.2011 14:57 |
словарь t9 | Yippee-ki-yay | Помощь студентам | 1 | 08.11.2011 00:13 |
Словарь | Ципихович Эндрю | Microsoft Office Word | 2 | 22.02.2011 21:02 |
Словарь | Rebel123 | Софт | 4 | 03.07.2009 09:19 |