Решение задачи Самый длинный палиндром с Codeforces

Без пояснения   Просмотров: 16


Вернувшись к решению задач, Гильдонг взялся за изучение палиндромов. Он выяснил, что палиндром это строка, которая равна своему перевороту. Например, строки «pop», «noon», «x», и «kkkkkk» являются палиндромами, а строки «moon», «tv», и «abab» не являются. Пустая строка также является палиндромом.

Гильдонгу очень понравился этот концепт, так что он решил немного с ним поиграть. У него есть n различных строк равной длины m. Он хочет удалить некоторые из этих строк (возможно, ни одну, или все) и переставить оставшиеся, чтобы их конкатенация была палиндромом. Он также хочет, чтобы палиндром был как можно длиннее. Помогите ему решить эту задачу!

Код

#include<bits/stdc++.h>
using namespace std;
int main()
{
	set <string> a;
	int n,m;
	cin>>n>>m;
	string s,t,x,mid,ans="";
	while(n--)
	{
		cin>>s;
		t=s;
		reverse(t.begin(),t.end());
		if(s==t) mid=t;
		else if(a.count(t)) ans+=t;
		a.insert(s);
	}
	x=ans;
	reverse(x.begin(),x.end());
	ans+=mid+x;
	cout<<ans.size()<<"\n"<<ans;

}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться