MAGCARI

Key

Dec 30th, 2022
1,566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. /*
  2.     Task    : _example
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 31 December 2022 [11:49]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. char a[1010],b[1010],key[2010];
  10. int dp[1010][1010]; // consider a[1..i] and b[1..j] can make key[1..i+j]
  11. int main(){
  12.     cin.tie(0)->sync_with_stdio(0);
  13.     cin.exceptions(cin.failbit);
  14.     cin >> a+1 >> b+1;
  15.     int n = strlen(a+1),m = strlen(b+1);
  16.     int q;
  17.     cin >> q;
  18.     while(q--){
  19.         cin >> key+1;
  20.         dp[0][0] = 1;
  21.         for(int i=1;i<=n;i++)
  22.             if(a[i] == key[i] && dp[i-1][0])
  23.                 dp[i][0] = 1;
  24.         for(int i=1;i<=m;i++)
  25.             if(b[i] == key[i] && dp[0][i-1])
  26.                 dp[0][i] = 1;
  27.         for(int i=1;i<=n;i++)
  28.             for(int j=1;j<=m;j++)
  29.                 if((a[i] == key[i+j] && dp[i-1][j]) || (b[j] == key[i+j] && dp[i][j-1]))
  30.                     dp[i][j] = 1;
  31.         if(dp[n][m])    cout << "Yes\n";
  32.         else            cout << "No\n";
  33.         memset(dp,0,sizeof dp);
  34.     }
  35.     return 0;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment