#include<bits/stdc++.h>
struct trie
{
int cnt;
char str[100+5];
trie *next[26];
};
trie *rt=new trie;
int mx;
char ans[100+5],a[100+5];
void settrie(char *s,int cnt)
{
int len=strlen(s),i,c,j;
char str[100+5];
trie *p,*t;
p=rt;
for(i=0;i<len;i++)
{
c=s[i]-'a';
if(p->next[c]==NULL)
{
t=new trie;
for(j=0;j<26;j++)
t->next[j]=NULL;
t->cnt=0;
p->next[c]=t;
}
p=p->next[c];
p->cnt+=cnt;
str[i]=s[i];
str[i+1]=0;
strcpy(p->str,str);
}
}
void dfs(trie *p,int cur ,int ed)
{
if(cur==ed)
{
if(p->cnt>mx)
{
mx=p->cnt;
strcpy(ans,p->str);
}
}
int i,j,k,n,z;
k=a[cur+1]-'0';
if(k==7||k==9) n=4;
else n=3;
if(k==8) z=19;
else if(k==9) z=22;
else z=(k-2)*3;
for(i=0;i<n;i++)
{
if(p->next[i+z]==NULL) continue;
dfs(p->next[i+z],cur+1,ed);
}
}
int main()
{
int i,j,_,n,m,t;
scanf("%d",&_);
for(int k=1;k<=_;k++)
{
scanf("%d",&n);
for(i=0;i<26;i++)
rt->next[i]=NULL;
rt->cnt=0;
for(i=0;i<n;i++)
{
scanf("%s%d",a,&t);
settrie(a,t);
}
printf("Scenario #%d:\n",k);
scanf("%d",&m);
for(int q=1;q<=m;q++)
{
scanf("%s",&a);
for(j=0;a[j]!='1';j++)
{
mx=-1;
dfs(rt,-1,j);
if(mx==-1) printf("MANUALLY\n");
else printf("%s\n",ans);
}
if(q!=m) printf("\n");
}
printf("\n\n");
}
return 0;
}
hdu 1298 T9 trie
最新推荐文章于 2017-09-28 21:50:00 发布