#include <iostream>
using namespace std;
bool palindrome(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;
}
template<size_t N>
bool palindrome(const int (&arr)[N])
{
return palindrome(arr, N);
}
int main()
{
int arr1[] = { 1, 2, 3, 2, 1 };
cout << palindrome(arr1) << endl;
// true
int arr2[] = { 1, 2, 3, 3, 2, 1 };
cout << palindrome(arr2) << endl;
// true
int arr3[] = { 1, 2, 3, 2, 1, 5, 6, 6, 5 };
cout << palindrome(arr3) << endl;
// false
int arr4[] = { 1, 2, 3, 2, 1, 5, 6, 7, 6, 5 };
cout << palindrome(arr4) << endl;
// false
int arr5[] = { 1, 2, 3, 3, 1, 5, 6, 6, 5 };
cout << palindrome(arr5) << endl;
// false
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBwYWxpbmRyb21lKGNvbnN0IGludCBhcnJbXSwgaW50IG4pCnsKICAgIGlmIChuIDwgMSkKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgaW50IG1pZGRsZSA9IG4gLyAyOyAtLW47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytpKSB7CiAgICAgICAgaWYgKGFycltpXSAhPSBhcnJbbi1pXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTj4KYm9vbCBwYWxpbmRyb21lKGNvbnN0IGludCAoJmFycilbTl0pCnsKCXJldHVybiBwYWxpbmRyb21lKGFyciwgTik7Cn0KCmludCBtYWluKCkKewogICAgaW50IGFycjFbXSA9IHsgMSwgMiwgMywgMiwgMSB9OwogICAgY291dCA8PCBwYWxpbmRyb21lKGFycjEpIDw8IGVuZGw7CiAgICAvLyB0cnVlCgogICAgaW50IGFycjJbXSA9IHsgMSwgMiwgMywgMywgMiwgMSB9OwogICAgY291dCA8PCBwYWxpbmRyb21lKGFycjIpIDw8IGVuZGw7CiAgICAvLyB0cnVlCgogICAgaW50IGFycjNbXSA9IHsgMSwgMiwgMywgMiwgMSwgNSwgNiwgNiwgNSB9OwogICAgY291dCA8PCBwYWxpbmRyb21lKGFycjMpIDw8IGVuZGw7CiAgICAvLyBmYWxzZQoKICAgIGludCBhcnI0W10gPSB7IDEsIDIsIDMsIDIsIDEsIDUsIDYsIDcsIDYsIDUgfTsKICAgIGNvdXQgPDwgcGFsaW5kcm9tZShhcnI0KSA8PCBlbmRsOwogICAgLy8gZmFsc2UKCiAgICBpbnQgYXJyNVtdID0geyAxLCAyLCAzLCAzLCAxLCA1LCA2LCA2LCA1IH07CiAgICBjb3V0IDw8IHBhbGluZHJvbWUoYXJyNSkgPDwgZW5kbDsKICAgIC8vIGZhbHNlCgogICAgcmV0dXJuIDA7Cn0K