Advertisement
Zeinab_Hamdy

Untitled

Mar 15th, 2024
512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define nl "\n"
  4. #define fi first
  5. #define se second
  6. #define pb push_back
  7. #define ll long long
  8. #define ull unsigned ll
  9. #define RV  return void
  10. #define sz(x) int(x.size())
  11. #define all(v) v.begin(), v.end()
  12. #define rall(v) v.rbegin(), v.rend()
  13. #define fixed(n) fixed << setprecision(n)
  14. #define cin(v) for (auto&i:v) cin >> i;
  15. #define cout(v) for (auto&i:v) cout << i << " ";
  16. #define clr(memo, x) memset(memo, x, sizeof memo)
  17. #define FastCode ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  18.  
  19. void  Zainab(){
  20.             // #ifndef ONLINE_JUDGE
  21.               freopen("longpath.in", "r", stdin);
  22.               freopen("longpath.out", "w", stdout);
  23.             // #endif
  24. }
  25.  
  26.  
  27.  
  28. int n , m;
  29. string s,t;
  30.  
  31. vector < vector < int > > dp;
  32.  
  33. int rec(int i , int j ){
  34.     if(i >=n or j >= m) return 0;
  35.    
  36.     int & ret = dp[i][j];
  37.     if(~ret)
  38.         return ret ;
  39.  
  40.     ret =0;
  41.     if(s[i] == t[j])
  42.         ret = max(ret , 1 + rec(i +1 , j+1));
  43.    
  44.     ret = max(ret , rec(i+1 , j));
  45.     ret = max(ret , rec(i , j +1));
  46.    
  47.    
  48.    
  49.     return ret;
  50. }
  51.  
  52.  
  53.  
  54. void build(int i , int j ){
  55.    
  56.     if(i >=n or j >= m) return ;
  57.    
  58.     int ret = dp[i][j];
  59.    
  60.     if(s[i] == t[j] and ret == dp[i+1][j+1] +1 ) {
  61.         cout << s[i] ;
  62.         build(i+1 , j+1);
  63.         return ;
  64.     }
  65.    
  66.     if(ret == dp[i][j+1]){
  67.         build(i , j+1);
  68.  
  69.     }
  70.     else if(ret == dp[i+1][j]){
  71.  
  72.         build(i+1 , j);
  73.     }
  74.    
  75. }
  76. void myCode(){
  77.  
  78. cin >> s >> t;
  79. n=sz(s) , m = sz(t);
  80.  
  81. dp.assign(n+1 , vector < int > (m+1 , -1));
  82.  
  83. int len= rec(0,0);
  84. cout << len << nl;
  85.  
  86. build(0,0);
  87.  
  88.  
  89. }
  90.  
  91.  
  92. int main(){
  93.                                    FastCode ;
  94.                                     //  Zainab() ;
  95.  
  96.     int testCase=1;
  97.         //   cin >> testCase ;
  98.    
  99.       for(int i=1 ; i<= testCase ; i++)
  100.         myCode();
  101.  
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement