Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //UVa Q10941
- #include <bits/stdc++.h>
- using namespace std;
- bool check(string s1, string s2){
- for(int i = 0; i < min(s1.size(), s2.size()); ++i){
- if(s1[i] != s2[i])return 0;
- }
- return 1;
- }
- string cut(string s1, string s2){
- string tar = "";
- if(s1.size() < s2.size())for(int i = s1.size(); i < s2.size(); ++i)tar += s2[i];
- else for(int i = s2.size(); i < s1.size(); ++i)tar += s1[i];
- return tar;
- }
- string arr[1005];
- int main(){
- int t, n;
- cin >> t;
- while(t--){
- string s1, s2, one;
- cin >> s1 >> s2;
- if(check(s1, s2))one = cut(s1, s2);
- cin >> n;
- for(int i = 0; i < n; ++i)cin >> arr[i];
- map<string, int> vis;
- deque<string> dq;
- bool flag = 1;
- if(one == ""){
- cout << 0 << '\n';
- flag = 0;
- }else{
- dq.emplace_back(one);
- vis[one] = 0;
- }
- while(!dq.empty() && flag){
- string tmd = dq.front();
- dq.pop_front();
- //cout << tmd << endl;
- for(int i = 0; i < n && flag; ++i){
- if(check(arr[i], tmd)){
- string in = cut(tmd, arr[i]);
- if(in == ""){
- cout << vis[tmd]+1 << '\n';
- flag = 0;
- }else if(vis.find(in) == vis.end()){
- dq.emplace_back(in);
- vis[in] = vis[tmd]+1;
- }
- }
- }
- }
- if(flag)cout << -1 << '\n';
- }
- return 0;
- }
RAW Paste Data