Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <cstring>
- #include <set>
- using namespace std;
- string arr[100000];
- int ana[100000];
- int nwords;
- set<string>resp;
- char minuscula(char c){
- if (c>='A' && c<='Z'){
- return (c+'a'-'A');
- }
- return c;
- }
- int veces(char c,int n){
- int nveces=0;
- for (int i=0;i<arr[n].size();i++)
- if (minuscula(arr[n][i])==c)
- nveces++;
- return nveces;
- }
- int SonAnagramas(int a,int b){
- //cout<<"Veamos si "<<arr[a]<<" y "<<arr[b]<<" son anagramas"<<endl;
- //cout<<arr[a].size()<<" "<<arr[b].size()<<endl;
- if (arr[a].size()!=arr[b].size())
- return 0;
- for (int i=0;i<arr[a].size();i++){
- char c=minuscula(arr[a][i]);
- //cout<<c<<" aparece en "<<arr[a]<<" "<<veces(c,a)<<"veces y aparece en "<<arr[b]<<" "<<veces(c,b)<<" veces."<<endl;
- if (veces(c,a)!=veces(c,b)){
- //cout<<"No son anagramas"<<endl;
- return 0;}
- }
- return 1;
- }
- void VerificaAnanagrama(int n){
- int anag=1;
- for (int i=(n+1);i<nwords;i++){
- if (ana[i]==1){
- //cout<<arr[i]<<" es ananagrama, comparemos"<<endl;
- if (SonAnagramas(n,i)){
- //cout<<arr[n]<<" y "<<arr[i]<<" son anagramas"<<endl;
- anag=0;
- ana[n]=0;ana[i]=0;
- }
- }
- }
- if (anag==1)
- resp.insert(arr[n]);
- }
- int main() {
- string s;
- for (int i=0;i<100000;i++) ana[i]=1;
- nwords=0;
- while (cin>>s && s!="#"){
- arr[nwords]=s;
- nwords++;
- }
- for (int i=0;i<nwords;i++){
- if (ana[i]==1){
- //cout<<"se va a verificar: "<<arr[i]<<endl;
- VerificaAnanagrama(i);}
- }
- for (set<string>::iterator it=resp.begin();it!=resp.end();it++)
- cout<<*(it)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment