DuongNhi99

NEARLY

Dec 10th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e5 + 5;
  5.  
  6. int n;
  7. string s;
  8. bool dp[N/2][2][2] = {false};
  9.  
  10. bool checkPalindrome(string s) {
  11.     for(int i = 0; i < s.size() / 2; i++)
  12.     if(s[i] != s[s.size() - 1 - i])
  13.         return false;
  14.     return true;
  15. }
  16.  
  17. void solve(int n1) {
  18.     for(int i = 1; i <= n1; ++i)
  19.         for(int w1 = 0; w1 <= 1; ++w1)
  20.             for(int w2 = 0; w2 <= 1; ++w2) {
  21.                 if(i == 1) {
  22.                     dp[i][w1][w2] = (s[w1] == s[n-1 - w2]);
  23.                     continue;
  24.                 }
  25.  
  26.                 for(int nw1 = 0; nw1 <= 1 - w1; ++nw1)
  27.                     for(int nw2 = 0; nw2 <= 1 - w2; ++nw2) {
  28.                         char c1;
  29.                         if(w1) c1 = s[i];
  30.                         else if(nw1) c1 = s[i-2];
  31.                         else c1 = s[i-1];
  32.  
  33.                         char c2;
  34.                         if(w2) c2 = s[n-1 - i];
  35.                         else if(nw2) c2 = s[n-1 - (i-2)];
  36.                         else c2 = s[n-1 - (i-1)];
  37.  
  38.                         if(c1 == c2) dp[i][w1][w2] |= dp[i-1][nw1][nw2];
  39.                     }
  40.             }
  41. }
  42.  
  43. int main() {
  44.     //freopen("in.txt", "r", stdin);
  45.     freopen("NEARLY.inp", "r", stdin);
  46.     freopen("NEARLY.out", "w", stdout);
  47.     ios_base::sync_with_stdio(false);
  48.     cin.tie(NULL); cout.tie(NULL);
  49.  
  50.     cin >> s;
  51.     if(s.size() == 1 || checkPalindrome(s)) cout << "YES" << '\n';
  52.     else {
  53.         n = (int)s.size();
  54.         solve(n / 2);
  55.  
  56.         bool res = dp[n/2][0][0];
  57.         if(n % 2 == 1)
  58.             res |= (dp[n/2][1][0] | dp[n/2][0][1]);
  59.  
  60.         if(res) cout << "YES" << '\n';
  61.         else  cout << "NO" << '\n';
  62.  
  63.     }
  64.  
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment