fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool isPalindrome(const int arr[], int n)
  5. {
  6. if (n < 1)
  7. return false;
  8.  
  9. int middle = n / 2; --n;
  10. for (int i = 0; i < middle; ++i) {
  11. if (arr[i] != arr[n-i]) {
  12. return false;
  13. }
  14. }
  15.  
  16. return true;
  17. }
  18.  
  19. bool isSinglePalindromeOrConcatentedPalindromes(const int arr[], int n)
  20. {
  21. if (isPalindrome(arr, n))
  22. return true;
  23.  
  24. int m = n - 1;
  25. for(int i = 1; i < m; ++i)
  26. {
  27. if (isPalindrome(arr, i) && isPalindrome(arr+i, n-i))
  28. return true;
  29. }
  30.  
  31. return false;
  32. }
  33.  
  34. template<size_t N>
  35. bool isSinglePalindromeOrConcatentedPalindromes(const int (&arr)[N])
  36. {
  37. return isSinglePalindromeOrConcatentedPalindromes(arr, N);
  38. }
  39.  
  40. int main()
  41. {
  42. int arr1[] = { 1, 2, 3, 2, 1 };
  43. cout << isSinglePalindromeOrConcatentedPalindromes(arr1) << endl;
  44. // true
  45.  
  46. int arr2[] = { 1, 2, 3, 3, 2, 1 };
  47. cout << isSinglePalindromeOrConcatentedPalindromes(arr2) << endl;
  48. // true
  49.  
  50. int arr3[] = { 1, 2, 3, 2, 1, 5, 6, 6, 5 };
  51. cout << isSinglePalindromeOrConcatentedPalindromes(arr3) << endl;
  52. // true
  53.  
  54. int arr4[] = { 1, 2, 3, 2, 1, 5, 6, 7, 6, 5 };
  55. cout << isSinglePalindromeOrConcatentedPalindromes(arr4) << endl;
  56. // true
  57.  
  58. int arr5[] = { 1, 2, 3, 3, 1, 5, 6, 6, 5 };
  59. cout << isSinglePalindromeOrConcatentedPalindromes(arr5) << endl;
  60. // false
  61.  
  62. return 0;
  63. }
Success #stdin #stdout 0.01s 5548KB
stdin
Standard input is empty
stdout
1
1
1
1
0