Dang_Quan_10_Tin

CHAOTIC MERGE

Jun 4th, 2022
1,087
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ll = long long;
  5.  
  6. constexpr int N = 1e3 + 5;
  7. constexpr ll mod = 998244353;
  8. string x, y;
  9. int n, m;
  10.  
  11. ll f[N][N][2];
  12.  
  13. void Read()
  14. {
  15.     cin >> x >> y;
  16.     m = x.size();
  17.     n = y.size();
  18.     x = " " + x;
  19.     y = " " + y;
  20. }
  21.  
  22. void Solve()
  23. {
  24.     ll ans(0);
  25.  
  26.     for (int i = 0; i <= m; ++i)
  27.         for (int j = 0; j <= n; ++j)
  28.             if ((i == 0) + (j == 0) < 2)
  29.             {
  30.                 // t = 0
  31.                 if (i != 0)
  32.                 {
  33.                     if (j == 0)
  34.                         (++f[i][j][0]) %= mod;
  35.                     else if (x[i] != y[j])
  36.                         (f[i][j][0] += f[0][j][1]) %= mod;
  37.  
  38.                     if (i < m && x[i] != x[i + 1])
  39.                         (f[i + 1][j][0] += f[i][j][0]) %= mod;
  40.                     if (j < n && j != 0 && x[i] != y[j + 1])
  41.                         (f[i][j + 1][1] += f[i][j][0]) %= mod;
  42.                 }
  43.  
  44.                 // t = 1
  45.                 if (j != 0)
  46.                 {
  47.                     if (i == 0)
  48.                         (++f[i][j][1]) %= mod;
  49.                     else if (x[i] != y[j])
  50.                         (f[i][j][1] += f[i][0][0]) %= mod;
  51.  
  52.                     if (i < m && i != 0 && y[j] != x[i + 1])
  53.                         (f[i + 1][j][0] += f[i][j][1]) %= mod;
  54.                     if (j < n && y[j] != y[j + 1])
  55.                         (f[i][j + 1][1] += f[i][j][1]) %= mod;
  56.                 }
  57.  
  58.                 //cout << i << " " << j << ": " << f[i][j][0] << " " << f[i][j][1] << '\n';
  59.  
  60.                 if (i != 0 && j != 0)
  61.                     (ans += f[i][j][0] + f[i][j][1]) %= mod;
  62.             }
  63.  
  64.     cout << ans;
  65. }
  66.  
  67. int32_t main()
  68. {
  69.     ios::sync_with_stdio(0);
  70.     cin.tie(0);
  71.     cout.tie(0);
  72.     Read();
  73.     Solve();
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment