Симметричная последовательность С++
Последовательность чисел назовем симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными: 1 2 3 4 5 4 3 2 1 1 2 1 2 2 1 2 1 Вашей программе будет дана последовательность чисел. Требуется определить, какое минимальное количество и каких чисел надо приписать в конец этой последовательности, чтобы она стала симметричной.
Входные данные
Сначала вводится число N — количество элементов исходной последовательности (1≤N≤100). Далее через пробел идут N чисел — элементы этой последовательности, натуральные числа от 1 до 9.
Выходные данные
Выведите сначала число M — минимальное количество элементов, которое надо дописать к последовательности, а потом M чисел (каждое — от 1 до 9) — числа, которые надо дописать к последовательности.
Примеры
Ввод
Вывод
5
1 2 3 4 5
4
4 3 2 1
9
1 2 3 4 5 4 3 2 1
0
5
1 2 1 2 2
3
1 2 1
Answers & Comments
Ответ:
сори что поздно но вроде бы я решил ток щас
Объяснение:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a;
cin >> a;
vector <int> v(a);
vector <int> ans;
vector <int> empty;
for (int i = 0; i < v.size(); i++) {
cin>>v[i];
}
int d = a - 1;
bool isparity = a%2 == 1;
for (int i = 0; i < v.size(); i++) {
if (v[i] == v[d] && (i!=d || (isparity && i == a/2))) {
d--;
}
else if (i!=d && i!=a-1) {
ans = empty;
for (int j = 0; j <= i; j++) {
ans.push_back(v[j]);
}
}
else {
ans = empty;
for (int j = 0; j < i; j++) {
ans.push_back(v[j]);
}
}
}
cout<<ans.size()<<endl;
for (int i = ans.size()- 1; i >= 0; i--) {
cout<<ans[i]<<" ";
}
return 0;
}