Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <list>
- #include <map>
- #include <set>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <bitset>
- #include <algorithm>
- #include <functional>
- #include <numeric>
- #include <utility>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- int main()
- {
- string A,W,S,Smod;
- int T;
- cin >> T;
- for(int i=0;i<T;i++)
- {
- cin >> A;
- cin >> W;
- cin >> S;
- //cout<<W<<endl;
- map<char,int> alpha;
- map<int,char> alphainverse;
- Smod.assign(S.size(),'0');
- for(unsigned int j=0;j<A.size();j++)
- {
- alpha.insert(pair<char,int>(A[j],j));
- alphainverse.insert(pair<int,char>(j,A[j]));
- //cout<<alpha[A[j]]<<" "<<A[j]<<endl;
- }
- vector<int> shifts;
- for(unsigned int j=0;j<A.size();j++)
- {
- for(unsigned int k=0;k<S.size();k++)
- {
- Smod[k] = alphainverse[(alpha[S[k]]+j)%(A.size())];
- }
- //cout<<Smod<<endl;
- int cont=0;
- int occur=0;
- for(unsigned int k=0;k<Smod.size();k++)
- {
- //cout<<Smod[k]<<" "<<W[cont]<<endl;
- if(Smod[k]==W[cont])
- cont++;
- else if(Smod[k]==W[0])
- cont=1;
- else cont=0;
- if(cont==W.size())
- {
- //cout<<"Achou";
- occur++;
- cont=0;
- }
- }
- if(occur==1)
- {
- //cout<<"bizu";
- shifts.push_back(j);
- }
- }
- for(unsigned int k=0;k<shifts.size();k++)
- {
- shifts[k] = (A.size()-shifts[k])%(A.size());
- }
- if(shifts.size()==0)
- cout<<"sem solucao"<<endl;
- else if(shifts.size()==1)
- cout<<"unica: "<<shifts[0]<<endl;
- else
- {
- cout<<"ambiguo:";
- sort(shifts.begin(),shifts.end());
- for(unsigned int j=0;j<shifts.size();j++)
- cout<<" "<<shifts[j];
- cout<<endl;
- }
- shifts.clear();
- alpha.clear();
- alphainverse.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement