P3384 【模板】輕重鏈剖分(樹鏈剖分)
阿新 • • 發佈:2020-08-10
原題連結
題解
這個題目貌似是個模擬題,直接模擬就是了
程式碼如下
#include <iostream> #include <cstring> #include <algorithm> #include <set> using namespace std; set<string> s; int main(){ int T; cin >> T; for(int k = 1; k <= T; ++ k){ int n; cin >> n; string s1, s2, s12; string t = ""; cin >> s1 >> s2 >> s12; int res = 0; bool flag = false; while(!s.count(t)){ s.insert(t); t = ""; for(int i = 0; i < n; ++ i) t += s2[i], t += s1[i]; res ++; if(t == s12) {flag = true; break;} s1 = t.substr(0, n); s2 = t.substr(n, n);//題目中是說最高的C個,不是高的C個的頂部開始,不需要反轉 } cout << k << ' '; if(!flag) cout << -1 << '\n'; else cout << res << '\n'; s.clear(); } return 0; }