Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 23.02.2018
Сообщений: 10
1

Разбить строку на 4 палиндрома

25.02.2018, 13:27. Показов 1773. Ответов 7

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Условие:
Дана строка s.Нужно разбить ее на 4 палиндрома.

Входные данные:
Строка S |S|<2*10^5

Выходные данные:
"No"-если не возможно разбить строку на 4 палиндрома.
"Yes" а также 4 строки с палиндромами - если возможно разбить строку.
Если есть несколько вариантов,то вывести любой.

Пример 1:
Вход:
abacbcabaa

Выход:
Yes
aba
cbc
aba
a

Пример 2:
Вход:
abcde

Выход:
No


Я написал код который показывает все палиндромы в строке.
d1-массив с палиндромами нечетной длины.
d2-массив с палиндромами четной длины.
В массивах хранятся цифры которые означают количество Палиндромов с центром в точке i.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    string s;
    cin>>s;
    long long n=s.length();
    vector<int> d1 (n),  d2 (n);
    for (int i=0; i<n; ++i)
    {
        d1[i] = 1;
        while (i-d1[i] >= 0 && i+d1[i] < n && s[i-d1[i]] == s[i+d1[i]])
            ++d1[i];
 
        d2[i] = 0;
        while (i-d2[i]-1 >= 0 && i+d2[i] < n && s[i-d2[i]-1] == s[i+d2[i]])
            ++d2[i];
    }
 
    return 0;
}
Помогите реализовать алгоритм разбиения строки на 4 палиндрома.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2018, 13:27
Ответы с готовыми решениями:

Как разбить строку через Split по переносам на новую строку?
У меня есть строка (string file), которая выглядит так, как на фото. Как её разбить по переносам на...

Разбить строку
Просьба написать программу на С++ , которая разбивает строку длинной в 200 символов на строки по 20.

Разбить строку
Пример строки: 012313_131232,231234_1235122,1237843_945345 и таких пар может быть много. Заранее их...

Разбить строку
Как разбить строку средствами джава скрипт? На входе: авава: https://www.cyberforum.ru...

7
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
25.02.2018, 17:06 2
dddddoooosssss, дай ссылку на систему тестирования
0
1 / 1 / 0
Регистрация: 23.02.2018
Сообщений: 10
25.02.2018, 17:13  [ТС] 3
Цитата Сообщение от outoftime Посмотреть сообщение
dddddoooosssss, дай ссылку на систему тестирования
Системы нет,есть только условия.Друг скинул
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
25.02.2018, 17:15 4
Лучший ответ Сообщение было отмечено dddddoooosssss как решение

Решение

http://e-maxx.ru/algo/palindromes_count берешь алгоритм Манакера и запускаешь динамику.

Добавлено через 1 минуту
Цитата Сообщение от dddddoooosssss Посмотреть сообщение
Системы нет,есть только условия.Друг скинул
Тогда напиши еще для себя пару тестов и проверь время выполнения. Если больше 1 сек - решение надо переделать.
1
1 / 1 / 0
Регистрация: 23.02.2018
Сообщений: 10
25.02.2018, 17:15  [ТС] 5
Цитата Сообщение от outoftime Посмотреть сообщение
http://e-maxx.ru/algo/palindromes_count берешь алгоритм Манакера и запускаешь динамику.

Добавлено через 1 минуту

Тогда напиши еще для себя пару тестов и проверь время выполнения. Если больше 1 сек - решение надо переделать.
Можно чуть подробнее??А именно, что именно нужно сделать с динамикой?
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
25.02.2018, 17:55 6
dddddoooosssss, http://e-maxx.ru/algo/dfs жадно выбираешь самую большую глубину, если глубина больше 4х - заканчиваешь текущую ветку. Не знаю к чему тут динамика, мб какое-то свойство есть которое можно использовать, я, пока, его не вижу.
0
1 / 1 / 0
Регистрация: 23.02.2018
Сообщений: 10
25.02.2018, 20:56  [ТС] 7
http://e-maxx.ru/algo/palindromes_count берешь алгоритм Манакера и запускаешь динамику.
http://e-maxx.ru/algo/dfs жадно выбираешь самую большую глубину, если глубина больше 4х - заканчиваешь текущую ветку. Не знаю к чему тут динамика, мб какое-то свойство есть которое можно использовать, я, пока, его не вижу.
Как мне соединить эти два алгоритма.Поиск в глубину выполняется для графов,но после выполнения первого алгоритма у меня будут всего два массива.Не понимаю как эти два алгоритмы связаны между собой

Добавлено через 2 часа 50 минут
Цитата Сообщение от outoftime Посмотреть сообщение
http://e-maxx.ru/algo/palindromes_count берешь алгоритм Манакера и запускаешь динамику.

Добавлено через 1 минуту

Тогда напиши еще для себя пару тестов и проверь время выполнения. Если больше 1 сек - решение надо переделать.
Спасибо!Дошло.Я придумал решение.Огромное спасибо за ваше терпение.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
26.02.2018, 01:12 8
Цитата Сообщение от dddddoooosssss Посмотреть сообщение
Огромное спасибо за ваше терпение.
Всегда пожалуйста.

Правила

4.10 Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.
0
26.02.2018, 01:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 01:12
Помогаю со студенческими работами здесь

Разбить строку
Здравствуйте. Есть некая переменная var url, которая может содержать такие варианты строк 1) &quot;/&quot;...

Разбить строку
Есть строка: Нужно написать функцию, чтобы в результате получилось на выходе например в...

Разбить строку
Стоит такая задача: В таблице есть строка, которая содержит в себе :...

Разбить строку
Всем привет. Суть задачи: есть url такого видео controller/action/param1/value1/param2/value2/...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru