题意:给出三个字符串 s1,s2,s,其中 s1 和 s2 的长度和等于 s 的长度和,不可以改变 1,2 两串内字母顺序,将二者混合问能否形成 s。
#include<cstring> #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<string> #include<iostream> #include<algorithm> using namespace std; char s1[205], s2[205]; char s[405]; int vis[300][300]; int flag; void dfs(int a, int b, int c){ if(vis[a][b]) return; vis[a][b] = 1; if(s == '\0'){ flag = 1; return; } if(s1[a] == s && s2[b] == s){ dfs(a+1, b, c+1); dfs(a, b+1, c+1); }else if(s1[a] == s){ dfs(a+1, b, c+1); }else if(s2[b] == s){ dfs(a, b+1, c+1); } } int main(){ //freopen("a.txt", "r", stdin); int n; cin >> n; for(int cas = 1; cas <= n; cas++){ memset(vis, 0, sizeof(vis)); flag = 0; scanf("%s %s %s", s1, s2, s); dfs(0, 0, 0); char ans[5] = "no"; //cout << flag << endl; if(flag) strcpy(ans, "yes"); printf("Data set %d: %s\n", cas, ans); } return 0; }