tuki2501

SYM.cpp

Nov 3rd, 2021 (edited)
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define task "SYM"
  5.  
  6. const int N = 505;
  7.  
  8. int dp[N][N];
  9.  
  10. int main(){
  11.   freopen(task".INP", "r", stdin );
  12.   freopen(task".OUT", "w", stdout);
  13.   string s;
  14.   cin >> s;
  15.   int n = s.size();
  16.   s = '#' + s;
  17.   for (int k = 1; k <= n; k++)
  18.   for (int i = 1; i + k - 1 <= n; i++) {
  19.     int j = i + k - 1;
  20.     if (s[i] == s[j]) dp[i][j] = dp[i + 1][j - 1];
  21.     else dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1;
  22.   }
  23.   cout << dp[1][n] << '\n';
  24.   int i = 1, j = n, l = 0;
  25.   while (i < j) {
  26.     if (s[i] == s[j]) {
  27.       i++;
  28.       j--;
  29.     }
  30.     else {
  31.       if (dp[i + 1 - l][j - l] < dp[i - l][j - 1 - l]) {
  32.         s.insert(j + 1, 1, s[i]);
  33.         i++;
  34.       }
  35.       else {
  36.         s.insert(i, 1, s[j]);
  37.         i++;
  38.         l++;
  39.       }
  40.     }
  41.   }
  42.   cout << s.substr(1, s.size() - 1) << '\n';
  43. }
  44.  
Add Comment
Please, Sign In to add comment