#include<bits/stdc++.h>
using namespace std;
#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)
#define MOD 1000000007
#define MX 100010
int mx;
string ans;
struct Trie{
int cnt;
Trie *child[26];
Trie()
{
cnt=0;
for(int i=0;i<26;i++) child[i]=NULL;
}
};
void insert(string s, Trie *ob)
{
int sl=s.size();
for(int i=0;i<sl;i++)
{
int val=s[i]-'a';
if(ob->child[val]==NULL)
ob->child[val]=new Trie();
if(i==sl-1)
{
ob->child[val]->cnt++;
if(ob->child[val]->cnt > mx)
{
mx=ob->child[val]->cnt;
ans=s;
}
}
ob=ob->child[val];
}
return;
}
void delete_memory(Trie *ob)
{
for(int i=0;i<26;i++)
if(ob->child[i]!=NULL)
delete_memory(ob->child[i]);
delete ob;
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
int tc, kk=1, n, sl;
string s;
char ch;
while(getline(cin, s))
{
Trie *root=new Trie();
mx=0;
while(s!="#")
{
string tmp="";
sl=s.size();
for(int i=0;i<sl;i++)
{
if(s[i]>='A' && s[i]<='Z')
s[i]=tolower(s[i]);
if(s[i]>='a' && s[i]<='z')
tmp+=s[i];
else if(tmp.size()>0)
{
insert(tmp, root);
tmp="";
}
}
if(tmp.size()>0) insert(tmp, root);
getline(cin, s);
}
if(mx) cout<<setw(4)<<mx<<" "<<ans<<"\n";
delete_memory(root);
}
return 0;
}
No comments:
Post a Comment