Member 13322111 Ответов: 1

Добавление соседних nos. Чтобы получить массив симметрии


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

Например, если стопки карт изначально были 1 2 2 5 1 3 1 1, то может быть три слияния (2,2), (5,1) и (3,1), чтобы дать 1 4 6 4 1.
Обратите внимание, что слияние 3 чисел, скажем (1,2,2), считается 2 слияниями, одно между (1 2) и следующее между полученными 3 и следующими двумя. Следовательно, другое решение (1,2,2) (5,1) (3,1,1), приводящее к 5 6 5, принимает 2 + 2 + 1 или 5 слияний, и это не минимально.

Другое (тривиальное) решение состоит в том, чтобы объединить все стопки, чтобы дать 16. Это может быть единственным решением в некоторых случаях и показывает, что все начальные множества имеют по крайней мере одно (не обязательно минимальное) решение


Ввод

Есть две линии.
Первая строка - это количество свай.
Следующая строка содержит разделенные пробелами положительные целые числа, представляющие номера карт в стопках слева направо.

Выход

Если минимальное слияние приводит к более чем одной стопке, выход имеет две строки, первая из которых дает одно целое число (количество слияний), а вторая содержит целые числа, разделенные пробелами, давая количество карт в конечной последовательности стопки по порядку (слева направо).
Если нет другого решения, кроме слияния всех в одну кучу, выход будет представлять собой одну строку, содержащую буквы "тривиальное слияние".

Ограничения

Начальное количество стопок будет меньше 50, а количество карт в каждой стопке в начальной конфигурации будет меньше 1000.


Example 1

Input:
8
1 4 3 6 1 2 1 5

Output:
3
5 3 7 3 5


Что я уже пробовал:

#include <iostream>

using namespace std;

int main()
{
   cout << "Hello World" << endl; 
   
   return 0;
}

PIEBALDconsult

Мы не будем делать за тебя домашнее задание.

1 Ответов

Рейтинг:
2

Patrice T

#include <iostream>
using namespace std;
int main()
{
   cout << "Hello World" << endl; 
   return 0;
}

Мы не идиоты. Вы должны также сказать, что вы ничего не сделали, по крайней мере, это было бы честно.

Попробуйте выполнить домашнее задание с помощью листа бумаги и карандаша, решите задачу вручную. Поскольку вы не используете магию, у вас в голове есть метод, ваша задача-перевести этот метод в код.

Мы не делаем вашу домашнюю работу.
Домашнее задание предназначено не для того, чтобы проверить ваши навыки просить других людей выполнять вашу работу, а для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это все равно что пытаться научиться водить машину, обучая кого-то другого.
Создание алгоритма-это в основном поиск математики и необходимая адаптация к вашей реальной задаче.

Идея "развития" заключается в том, что это слово предполагает: "систематическое использование научно-технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".