Advertisement
den4ik2003

Untitled

Feb 23rd, 2022
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using std::vector;
  5. using std::string;
  6.  
  7. int main() {
  8.     std::ios_base::sync_with_stdio(0);
  9.     std::cin.tie(0);
  10.     std::cout.tie(0);
  11.     string first_str, second_str;
  12.     std::cin >> first_str >> second_str;
  13.     int n = first_str.size(), m = second_str.size();
  14.     vector<vector<bool>> get_ans1(n + 1);
  15.     vector<vector<bool>> get_ans2(n + 1);
  16.     vector<bool> base(m + 1, 0);
  17.     vector<int> LCS(m + 1, 0);
  18.     get_ans1[0] = base;
  19.     get_ans2[0] = base;
  20.     for (int i = 1; i <= n; ++i) {
  21.         vector<int> temp_max_str(m+1);
  22.         vector<bool> temp_get_ans1(m + 1);
  23.         vector<bool> temp_get_ans2(m + 1);
  24.         temp_max_str[0] = 0;
  25.         temp_get_ans1[0] = 0;
  26.         temp_get_ans2[0] = 0;
  27.         for (int j = 1; j <= m; ++j) {
  28.             //temp_max_str[j] = std::max(LCS[i-1][j], temp_max_str[j-1]);
  29.             if (LCS[j] > temp_max_str[j-1]) {
  30.                 temp_max_str[j] = LCS[j];
  31.                 temp_get_ans1[j] = 0;// {false, get_ans[i-1][j].second};//2*bit(LCS[i-1][j].second, 2);
  32.                 temp_get_ans2[j] = get_ans2[i-1][j];
  33.             } else {
  34.                 temp_max_str[j] = temp_max_str[j-1];
  35.                 temp_get_ans1[j] = temp_get_ans1[j-1];//bit(temp_max_str[j-1].second, 1);
  36.                 temp_get_ans2[j] = 0;
  37.             }
  38.             if (first_str[i-1] == second_str[j-1]) {
  39.                 temp_max_str[j] = std::max(temp_max_str[j], LCS[j-1] + 1);
  40.                 temp_get_ans1[j] = 1;
  41.                 temp_get_ans2[j] = 1;
  42.             }
  43.         }
  44.         LCS = temp_max_str;
  45.         get_ans1[i] = temp_get_ans1;
  46.         get_ans2[i] = temp_get_ans2;
  47.     }
  48.  
  49.     int cnt = 0, first = n, second = m;
  50.     int general_size = LCS[m];
  51.     vector<char> answer;
  52.     while (cnt < general_size) {
  53.         if (get_ans1[first][second] == 1 && get_ans2[first][second] == 1) {
  54.             answer.push_back(first_str[first-1]);
  55.             ++cnt;
  56.             --first;
  57.             --second;
  58.         } else if (get_ans1[first][second] == 0 && get_ans2[first][second] == 1) {
  59.             --first;
  60.         } else if (get_ans1[first][second] == 1 && get_ans2[first][second] == 0) {
  61.             --second;
  62.         } else if (get_ans1[first][second] == 0 && get_ans2[first][second] == 0) {
  63.             --first;
  64.             --second;
  65.         }
  66.     }
  67.     for (int i = answer.size() - 1; i >= 0; --i) {
  68.         std::cout << answer[i];
  69.     }
  70.     std::cout << std::endl;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement