Iamtui1010

palin.cpp

Oct 27th, 2022 (edited)
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4.  
  5. #define long long long
  6. #define nln '\n'
  7.  
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.     string s1, s2;
  13.     getline(cin, s1, nln);
  14.     s2 = s1;
  15.     reverse(s2.begin(), s2.end());
  16.  
  17.  
  18.  
  19.     long n = s1.size(), m = s2.size();
  20.     s1 = ' ' + s1;
  21.     s2 = ' ' + s2;
  22.  
  23.     vector<vector<long>> dp(n+1);
  24.     for (auto &i : dp)
  25.         i.resize(m+1, 0);
  26.  
  27.     for (long i = 1; i <= n; ++i)
  28.         for (long j = 1; j <= m; ++j)
  29.             if (s1[i] == s2[j])
  30.                 dp[i][j] = dp[i-1][j-1]+1;
  31.             else
  32.                 dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
  33.  
  34.     long i = n, j = m;
  35.     string res = "";
  36.     while (i > 0 && j > 0){
  37.         if (s1[i] == s2[j]){
  38.             res += s1[i];
  39.             --i, --j;
  40.         }
  41.         else{
  42.             if (dp[i-1][j] > dp[i][j-1])
  43.                 --i;
  44.             else
  45.                 --j;
  46.         }
  47.     }
  48.     cout << dp[n][m] << nln;
  49.     reverse(res.begin(), res.end());
  50.     cout << res << nln;
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment