Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5 + 5;
- int n;
- string s;
- bool dp[N/2][2][2] = {false};
- bool checkPalindrome(string s) {
- for(int i = 0; i < s.size() / 2; i++)
- if(s[i] != s[s.size() - 1 - i])
- return false;
- return true;
- }
- void solve(int n1) {
- for(int i = 1; i <= n1; ++i)
- for(int w1 = 0; w1 <= 1; ++w1)
- for(int w2 = 0; w2 <= 1; ++w2) {
- if(i == 1) {
- dp[i][w1][w2] = (s[w1] == s[n-1 - w2]);
- continue;
- }
- for(int nw1 = 0; nw1 <= 1 - w1; ++nw1)
- for(int nw2 = 0; nw2 <= 1 - w2; ++nw2) {
- char c1;
- if(w1) c1 = s[i];
- else if(nw1) c1 = s[i-2];
- else c1 = s[i-1];
- char c2;
- if(w2) c2 = s[n-1 - i];
- else if(nw2) c2 = s[n-1 - (i-2)];
- else c2 = s[n-1 - (i-1)];
- if(c1 == c2) dp[i][w1][w2] |= dp[i-1][nw1][nw2];
- }
- }
- }
- int main() {
- //freopen("in.txt", "r", stdin);
- freopen("NEARLY.inp", "r", stdin);
- freopen("NEARLY.out", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(NULL); cout.tie(NULL);
- cin >> s;
- if(s.size() == 1 || checkPalindrome(s)) cout << "YES" << '\n';
- else {
- n = (int)s.size();
- solve(n / 2);
- bool res = dp[n/2][0][0];
- if(n % 2 == 1)
- res |= (dp[n/2][1][0] | dp[n/2][0][1]);
- if(res) cout << "YES" << '\n';
- else cout << "NO" << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment