#include <iostream>
using namespace std;
bool isPalindrome(const int arr[], int n)
{
if (n < 1)
return false;
int middle = n / 2; --n;
for (int i = 0; i < middle; ++i) {
if (arr[i] != arr[n-i]) {
return false;
}
}
return true;
}
bool isSinglePalindromeOrConcatentedPalindromes(const int arr[], int n)
{
if (isPalindrome(arr, n))
return true;
int m = n - 1;
for(int i = 1; i < m; ++i)
{
if (isPalindrome(arr, i) && isPalindrome(arr+i, n-i))
return true;
}
return false;
}
template<size_t N>
bool isSinglePalindromeOrConcatentedPalindromes(const int (&arr)[N])
{
return isSinglePalindromeOrConcatentedPalindromes(arr, N);
}
int main()
{
int arr1[] = { 1, 2, 3, 2, 1 };
cout << isSinglePalindromeOrConcatentedPalindromes(arr1) << endl;
// true
int arr2[] = { 1, 2, 3, 3, 2, 1 };
cout << isSinglePalindromeOrConcatentedPalindromes(arr2) << endl;
// true
int arr3[] = { 1, 2, 3, 2, 1, 5, 6, 6, 5 };
cout << isSinglePalindromeOrConcatentedPalindromes(arr3) << endl;
// true
int arr4[] = { 1, 2, 3, 2, 1, 5, 6, 7, 6, 5 };
cout << isSinglePalindromeOrConcatentedPalindromes(arr4) << endl;
// true
int arr5[] = { 1, 2, 3, 3, 1, 5, 6, 6, 5 };
cout << isSinglePalindromeOrConcatentedPalindromes(arr5) << endl;
// false
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc1BhbGluZHJvbWUoY29uc3QgaW50IGFycltdLCBpbnQgbikKewoJaWYgKG4gPCAxKQoJCXJldHVybiBmYWxzZTsKCglpbnQgbWlkZGxlID0gbiAvIDI7IC0tbjsKCWZvciAoaW50IGkgPSAwOyBpIDwgbWlkZGxlOyArK2kpIHsKCQlpZiAoYXJyW2ldICE9IGFycltuLWldKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CgoJcmV0dXJuIHRydWU7Cn0KCmJvb2wgaXNTaW5nbGVQYWxpbmRyb21lT3JDb25jYXRlbnRlZFBhbGluZHJvbWVzKGNvbnN0IGludCBhcnJbXSwgaW50IG4pCnsKCWlmIChpc1BhbGluZHJvbWUoYXJyLCBuKSkKCQlyZXR1cm4gdHJ1ZTsKCglpbnQgbSA9IG4gLSAxOwoJZm9yKGludCBpID0gMTsgaSA8IG07ICsraSkKCXsKCQlpZiAoaXNQYWxpbmRyb21lKGFyciwgaSkgJiYgaXNQYWxpbmRyb21lKGFycitpLCBuLWkpKQoJCQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlPHNpemVfdCBOPgpib29sIGlzU2luZ2xlUGFsaW5kcm9tZU9yQ29uY2F0ZW50ZWRQYWxpbmRyb21lcyhjb25zdCBpbnQgKCZhcnIpW05dKQp7CglyZXR1cm4gaXNTaW5nbGVQYWxpbmRyb21lT3JDb25jYXRlbnRlZFBhbGluZHJvbWVzKGFyciwgTik7Cn0KCmludCBtYWluKCkKewogICAgaW50IGFycjFbXSA9IHsgMSwgMiwgMywgMiwgMSB9OwogICAgY291dCA8PCBpc1NpbmdsZVBhbGluZHJvbWVPckNvbmNhdGVudGVkUGFsaW5kcm9tZXMoYXJyMSkgPDwgZW5kbDsKICAgIC8vIHRydWUKCiAgICBpbnQgYXJyMltdID0geyAxLCAyLCAzLCAzLCAyLCAxIH07CiAgICBjb3V0IDw8IGlzU2luZ2xlUGFsaW5kcm9tZU9yQ29uY2F0ZW50ZWRQYWxpbmRyb21lcyhhcnIyKSA8PCBlbmRsOwogICAgLy8gdHJ1ZQoKICAgIGludCBhcnIzW10gPSB7IDEsIDIsIDMsIDIsIDEsIDUsIDYsIDYsIDUgfTsKICAgIGNvdXQgPDwgaXNTaW5nbGVQYWxpbmRyb21lT3JDb25jYXRlbnRlZFBhbGluZHJvbWVzKGFycjMpIDw8IGVuZGw7CiAgICAvLyB0cnVlCgogICAgaW50IGFycjRbXSA9IHsgMSwgMiwgMywgMiwgMSwgNSwgNiwgNywgNiwgNSB9OwogICAgY291dCA8PCBpc1NpbmdsZVBhbGluZHJvbWVPckNvbmNhdGVudGVkUGFsaW5kcm9tZXMoYXJyNCkgPDwgZW5kbDsKICAgIC8vIHRydWUKCiAgICBpbnQgYXJyNVtdID0geyAxLCAyLCAzLCAzLCAxLCA1LCA2LCA2LCA1IH07CiAgICBjb3V0IDw8IGlzU2luZ2xlUGFsaW5kcm9tZU9yQ29uY2F0ZW50ZWRQYWxpbmRyb21lcyhhcnI1KSA8PCBlbmRsOwogICAgLy8gZmFsc2UKCiAgICByZXR1cm4gMDsKfQ==