Laki333
22.06.2021 00:29

Интернетке тəуелдік белгілерін жазыңдар көмектесіңдерш​


Интернетке тəуелдік белгілерін жазыңдар көмектесіңдерш​

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
valityuk
17.09.2020 08:22

2018

Сообщений: 27

15.03.2019, 18:38 3

Лучший ответ Сообщение было отмечено CyberNinjaProg как решение

Решение

Я бы мог тебе написать готовый код, но для начала просто алгоритм объясню.

Во первых, симметричность такой последовательности разобъём на 2 типа - чётная и нечётная.

Чётная последовательность делиться на две одинаковые отражённые горизонтально части. Например, "12122121".

Нечётная делиться таким же образом, только посередине есть цифра не имеющая пары. Например, "123454321".

Соответственно нам надо проверить входную последовательность на возможность создать наикратчайшую симметричную последовательность одного из двух типов.

Конкретный алгоритм следующий:

//Для чётно-симметричной последовательности

Берём половину входной последовательности (если её длина нечётная, берём с округлением в большую сторону), и начинаем по одному её элементу, от последнего и до первого, сравнивать их с элементами второй половины, но только взятых в порядке слева-направо.

То-есть, от последовательности 12122, берём 121, и сравниваем с 22: i[2] == i[3] (1 == 2).

Сравниваем так до тех пор, пока последовательность не закончиться. Тогда, оставшаяся несрАвненной последовательность цифр взятой в порядке справа налево и будет ответом (вместе с количеством этих цифр).

Если же при сравнении, цифры оказались разными, начинаем всё сначала, только с цифры на одну правее.

То-есть теперь берём уже не 121, а 1212, и делаем всё предыдущее снова. Если последовательность закончилась, то есть если мы например взяли уже 12345 от 12345, то сравнивать уже ничего не нужно, надо просто взять всю последовательность в обратном порядке - "1234554321".

//Для нечётно-симметричной последовательности

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

То-есть, для входной последовательности 12345, берём 123 и начинаем сравнивать цифру 3 с цифрой 5, а не с цифрой 4.

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

//Итог

Для того, чтобы найти правильный ответ, надо найти и чётную, и нечётную последовательности. Затем сравнить длину обоих ответов. Кратчайший ответ будет верным.

0,0(0 оценок)
Ответ:
Z0L0Tk0C00L
11.10.2022 06:44

#include <iostream>

using namespace std;

int main()

{

   int N;

   cin >> N;

   int* arr = new int[N];

   for (int i(0); i < N; ++i) cin >> arr[i];

   int count(N - 1);

   int result = 0;

   for (; count >= 0 && result < arr[count]; --count) {

       if (count > 0) result += arr[count] - arr[count - 1];

   }

   int sum = 0;

   for (int i(count + 1); i < N; ++i) sum += arr[i];

   result = sum / (N - count);

   if (sum > result*(N - count)) ++result;

   cout << result;

}

Объяснение:

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота