POJ - 3087 Shuffle’m Up #include<iostream> #include<set> using namespace std; string suff(string a, string b) //“洗牌”函数 { string ret; for (int i = 0; i < (int)a.size(); i++) ret += b[i], ret += a[i]; return ret; } int main() { int T;cin >> T; for (int _ = 1; _ <= T; _++) { int n;cin >> n; string s1, s2, s3;cin >> s1 >> s2 >> s3; int ans = 1;//洗牌至少一次(第一次) set<string> mp;//记录字符串是否存在过 for (string t = suff(s1, s2); ; t = suff(t.substr(0, n), t.substr(n, n)), ans++) { if (mp.find(t) != mp.end()) { ans = -1; //形成闭环依然没有遇到答案 break; } else if (t == s3) break; //遇到答案 else mp.insert(t); } cout << _ << ' ' << ans << endl; } return 0; }