Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
11 / 10 / 5
Регистрация: 25.07.2020
Сообщений: 302

Найти лексикографически минимальную строку, которую можно получить при переходе из первой строки матрицы в последнюю

01.09.2020, 18:08. Показов 5363. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вам дана нижнетреугольная матрица из n строк (i-й ряд состоит ровно из i элементов, расположенных в столбцах с номерами от 1 до i). В каждой ячейке матрицы записана маленькая латинская буква. Также у вас есть пустая строка s.

Вы стоите в ячейке с координатами (1, 1) (первая строка, первый столбец). На каждом ходу можно делать переход на одну ячейку ниже или на одну ячейку по диагонали вправо-вниз. То есть из ячейки с координатами (i,j) можно попасть в ячейки (i+1,j) или (i+1,j+1).

Каждый раз, когда вы попадаете в новую ячейку, к строке s в конец приписывается буква, стоящая в этой ячейке. Найдите лексикографически минимальную строку, которую можно получить при переходе из первой строки матрицы в последнюю (n-ю).

Формат входных данных
В первой строке задано число n(1≤n≤5⋅10**3).Затем идёт n строк, в i-й находится строка из i символов, отвечающая первым i столбцам i-й строки матрицы.

Формат результата
Выведите искомую строку.

Примеры
Входные данные
3
o
nu
mwb
Результат работы
onm
Входные данные
4
a
bb
czc
defr
Результат работы
abcd

Написал алгоритм, но там ошибка, понял как исправить, но не могу тупо реализовать это.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2020, 18:08
Ответы с готовыми решениями:

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

Даны 2 строки. определить можно ли, переставляя символы в первой строке, получить вторую строку. Строки вводят
Даны 2 строки. определить можно ли, переставляя символы в первой строке, получить вторую строку. Строки вводятся вручую.

Ввести две строки. Вывести на экран можно ли, переставляя символы первой строки, получить вторую строку
Очень нужно решить задачу, чтоб экзамен поставили) Вот сама задача: Ввести две строки. Вывести на экран можно ли, переставляя...

29
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
01.09.2020, 18:23
Написал алгоритм...
... в студию! ©Якубович Л.А.
0
11 / 10 / 5
Регистрация: 25.07.2020
Сообщений: 302
01.09.2020, 19:09  [ТС]
Annemesski, Во входных данных каждая строка соответствует её размеру, можно выбрать минимальный под ним или правее под ним, я сделал такой алгоритм, но он дошёл до 8 теста, дальше ошибка, я потом подумал и понял, что ошибка из-за того, что там если две буквы одинаковы, то есть под буквой и под буквой правее, то нужно выбрать из ниже этих двух равных букв минимальную, и в соответствие с ней выбирать, но если там опять равные есть буквы, даже не 3, а 2, то ещё дальше идти, пока не будет одной минимальной, но я никак не могу это написать.

Добавлено через 2 минуты
На самом деле, мне кажется это похоже на рекурсию
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.09.2020, 19:27
Цитата Сообщение от Annemesski Посмотреть сообщение
... в студию! ©Якубович Л.А.
Навеяло

1
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 08:44
Цитата Сообщение от Jorka Посмотреть сообщение
На самом деле, мне кажется это похоже на рекурсию
Она и есть, классика жанра:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
std::string minStr(const std::vector<std::string> &M, const unsigned deep, unsigned i, unsigned j)
{
    std::string ret;
    ret += M[i][j];
 
    if (i < deep - 1)
    {
        if (M[i + 1][j] < M[i + 1][j + 1])
            ret += minStr(M, deep, i + 1, j);
        else if (M[i + 1][j] > M[i + 1][j + 1])
            ret += minStr(M, deep, i + 1, j + 1);
        else
        {
            std::string test1, test2;
            test1 += minStr(M, deep, i + 1, j);
            test2 += minStr(M, deep, i + 1, j + 1);
            ret += (test1 < test2 ? test1 : test2);
        }
    }
 
    return ret;
}
1
02.09.2020, 12:40

Не по теме:

i и j оставьте для математиков, лучше использовать col, row

0
02.09.2020, 13:07

Не по теме:

Avazart, чем лучше? row и col надежней ассоциируются с таблицей, в задаче нижнетреугольная матрица для которой row и col могут дать ложную надежду на существование элементов выше главной диагонали. Уж если конкретизировать имена индексов для данной задачи, то следует использовать что-то вроде istring и isymbol.

0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 13:23
Хотя бы тем что i и j тяжелее визуально различать. И я не говорю о смысловой нагрузке.

Добавлено через 2 минуты
Цитата Сообщение от Annemesski Посмотреть сообщение
в задаче нижнетреугольная матрица для которой row и col могут дать ложную надежду на существование элементов выше главной диагонали.
Столбцы есть столбцы, а строки есть строки тут не должно быть никаких левых надежд.
1
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 13:56
Цитата Сообщение от Avazart Посмотреть сообщение
Хотя бы тем что i и j тяжелее визуально различать.
Субъективно, мне например, легче различать i, j чем row, col, особенно сопоставляя границы по i < n и j < m, чем row < rows и col < cols.
Цитата Сообщение от Avazart Посмотреть сообщение
И я не говорю о смысловой нагрузке.
давая смысловые имена не говорить о смысловой нагрузке - бессмыслица.
Цитата Сообщение от Avazart Посмотреть сообщение
Столбцы есть столбцы, а строки есть строки тут не должно быть никаких левых надежд.
осмысленное имя - есть контекст, данные в контексте - информация, проще говоря: осмысленные имена переменных (типов, методов, etc) - подсказка о том, что за ними скрывается. Предлагаете не обращать на это внимания? Зачем тогда вообще имена?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 14:03
Цитата Сообщение от Annemesski Посмотреть сообщение
собенно сопоставляя границы
Возможно потому что m и n тоже не удачное именование ?

Добавлено через 30 секунд
чем row < rows и col < cols.
можно еще лучше col_count, row_count

Задайтесь вопросом, как скоро вы заметите ошибку перепутав m и n или i и j?
Как быстро другой программист поймет что такое i,j,m,n в Вашем коде?

Добавлено через 4 минуты
Цитата Сообщение от Annemesski Посмотреть сообщение
осмысленное имя - есть контекст, данные в контексте - информация,
Контекст четко определен - матрица, в матрице есть строки и столбцы или нет?
А вот что такое m и n в матрице совсем не очевидно.
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 14:04
Цитата Сообщение от Avazart Посмотреть сообщение
col_count, row_count
Вы мне предлагаете вместо 4-ех символов печатать 24, ну нет, все(!) объявляю себя математиком (шах и мат ) и буду использовать (i, j), а программистам - программистово
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 14:05
Цитата Сообщение от Annemesski Посмотреть сообщение
Вы мне предлагаете вместо 4-ех символов печатать 24, ну нет, все(!) объявляю себя математиком (шах и мат ) и буду использовать (i, j), а программистам - программистово
Главное это "легко читаемость" кода, а не "быстро писабильность".
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 14:07
Цитата Сообщение от Avazart Посмотреть сообщение
Задайтесь вопросом, как скоро вы заметите ошибку перепутав m и n или i и j?
работая с матрицей при первом же тесте
Цитата Сообщение от Avazart Посмотреть сообщение
Как быстро другой программист поймет что такое i,j,m,n в Вашем коде?
очевидно с ходу - это традиционные обозначения.
Цитата Сообщение от Avazart Посмотреть сообщение
Контекст четко определен - матрица, в матрице есть строки и столбцы или нет?
есть и как правило индексируются по i и j )))
Цитата Сообщение от Avazart Посмотреть сообщение
А вот что такое m и n в матрице совсем не очевидно.
а вот это уже лукавство.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 14:10
Цитата Сообщение от Annemesski Посмотреть сообщение
очевидно с ходу - это традиционные обозначения.
Для кого традиционное?
Цитата Сообщение от Annemesski Посмотреть сообщение
есть и как правило индексируются по i и j )))
Как правило математики сами путают что у них i и j.

Будем честны это скорее таблица чем матрица/2d_массив ибо нет по сути разряженных матриц.
И матрицы по определению таблицы
Ма́трица — математический объект, записываемый в виде прямоугольной таблицы ...
... которая представляет собой совокупность строк и столбцов,
https://ru.wikipedia.org/wiki/... 0%BA%D0%B0)
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 14:24
Avazart, да ну, математик смторит так Xij один идет за другим их и различать особо не надо, да и в коде примерно также, в ситуациях когда строки столбцы меняются местами и с row cols запутаться шансов не меньше.

А традиционное оно собственно из математики, так повелось и в подавляющем большинстве учебных материалов используются i, j. Ну а учеба так и закрепляется практикой. В общем-то это вопрос вкусовщины и внутрикомандных договоренностей.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 15:14
Цитата Сообщение от Annemesski Посмотреть сообщение
да ну, математик смторит так Xij один идет за другим их и различать особо не надо
Что один за другим строка за столбцом или столбец за строкой?

Добавлено через 1 минуту
Цитата Сообщение от Annemesski Посмотреть сообщение
А традиционное оно собственно из математики,
Какой математики ? Русской? Английской? Арабской? Хочу обрадовать в разных странах разные обозначения. Более того думаю не составит труда найти два учебника одной страны где обозначения разные.
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 16:10
Цитата Сообщение от Avazart Посмотреть сообщение
Что один за другим строка за столбцом или столбец за строкой?
Строка за столбцом.
Цитата Сообщение от Avazart Посмотреть сообщение
Какой математики ? Русской? Английской? Арабской?
не бывает ни русской ни английской ни папуа ново гвинейской математики.
Цитата Сообщение от Avazart Посмотреть сообщение
Хочу обрадовать в разных странах разные обозначения.
примеры в студию (что-то Аркдич зачастил в эту тему )
Цитата Сообщение от Avazart Посмотреть сообщение
Более того думаю не составит труда найти два учебника одной страны где обозначения разные.
опять таки, примерчик бы.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2020, 16:16
Ну я точно не стану рыться сейчас по учебникам.
0
11 / 10 / 5
Регистрация: 25.07.2020
Сообщений: 302
02.09.2020, 21:14  [ТС]
Annemesski, а чему равно deep, i, j?

Добавлено через 1 час 23 минуты
Какие параметры передать не могу понять

Добавлено через 20 минут
Я понял что надо, но, к сожалению на тесте 9 TL

Добавлено через 55 секунд
gg чтоли?
0
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
02.09.2020, 21:39
Jorka, идея у Вас есть, попробуйте оптимизировать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2020, 21:39
Помогаю со студенческими работами здесь

Ввести строку, создать вторую строку в два раза больше, в которую записать симболы первой строки
Ввести с клавиатуры строку симболов (до 20 симболов), динамически создать вторую строку в два раза больше чем введенная первая строка, в...

Определить, можно ли вторую строку получить путем перестановки символов первой строки
Даны два символьных строки, содержащие только символы латинского алфавита. Создать программу, которая определит, можно ли вторую строчку...

Проверить, можно ли, меняя местами четные и нечетные символы первой строки, получить вторую строку
На вход поступают две строки. Вывести true если меняя местами четные и нечетные символы одной строки, можно получить вторую строку. Вывести...

Переставить последнюю строку матрицы на место первой
Дан двумерный массив. Переставить последнюю строку на место первой. При этом первую, вторую,..., предпоследнюю строки опустить.

Найти лексикографически минимальный палиндром, который можно получить из слова S
У Максима есть слово S, и он очень хочет сделать из него палиндром, но не желает изменять слишлом большое количество символов. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru