题目:G - Shuffle’m Up
思路:
找到一个目标串,DFS所有情况直到找到目标串
注意:看清题,得到的合并串下半边才是a串
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
const int N = 120;
string s1, s2, s12;
int flag, res;
map<string, int> mp;
int n;
void dfs(string a, string b, string c)
{
res ++;
string ans = "";
int len = 0;
for(int i = 0; i < n; i ++)
{
ans.push_back(b[i]);
ans.push_back(a[i]);
}
mp[ans] ++;
// cout << ans << endl;
if(mp[ans] > 1)
{
flag = 1;
return ;
}
if(ans == c) return ;
for(int i = 0; i < n; i ++)
{
a[i] = ans[i];
// b.push_back(ans[i]);
// a.push_back(ans[i + n]);
b[i] = ans[n + i];
}
// cout << a << " **** * " << b << endl;
dfs(a, b, c);
}
int main()
{
int t;
cin >> t;
for(int test = 1; test <= t; test ++)
{
cin >> n;
cin >> s1 >> s2 >> s12;
flag = 0;
res = 0;
mp.clear();
dfs(s1, s2, s12);
if(flag) res = -1;
printf("%d %d\n", test, res);
}
}