POJ 1451 T9 G++trie树 dfs

    xiaoxiao2021-12-14  18

    #include <iostream> #include <cstdio> #include <string> using namespace std; //英语 看博友分析 trie树 dfs struct nod{ int sum; int p[26]; }da[10000]; int js; int mp[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9}; string ss; int mx; char tmp[10000]; char jg[10000]; void dfs(int pp,int x,int mn) { if(x==mn) { if(da[pp].sum>mx) { mx=da[pp].sum; for(int i=0;i<mn;i++) { jg[i]=tmp[i]; } } return; } int t=ss[x]-'0'; for(int i=0;i<26;i++) { if(da[pp].p[i]!=-1&&mp[i]==t) { tmp[x]=i+'a'; dfs(da[pp].p[i],x+1,mn); } } } int main() { int T; cin>>T; int tag=0; while(T--) { int n; cin>>n; for(int i=0;i<10000;i++) { da[i].sum=0; for(int j=0;j<26;j++) { da[i].p[j]=-1; } } js=0; for(int i=0;i<n;i++) { string s; int a; cin>>s>>a; int tp=0; for(int j=0;j<s.size();j++) { if(da[tp].p[s[j]-'a']==-1) { da[tp].p[s[j]-'a']=++js; tp=js; da[tp].sum=a; }else { tp=da[tp].p[s[j]-'a']; da[tp].sum+=a; } } } int m; cin>>m; tag++; cout<<"Scenario #"<<tag<<":"<<endl; while(m--) { cin>>ss; int tp=0; for(int i=0;i<ss.size()-1;i++) { mx=-1; dfs(0,0,i+1); if(mx!=-1) { for(int j=0;j<=i;j++) { cout<<jg[j]; } }else { cout<<"MANUALLY"; } cout<<endl; } cout<<endl; } cout<<endl; } return 0; }

     

     

    转载请注明原文地址: https://ju.6miu.com/read-969562.html

    最新回复(0)