ZOJ1039

来源:互联网 发布:美国二战知乎 编辑:程序博客网 时间:2024/05/16 02:52
字典树+搜索时用dfs
#include<cstdio>#include<cstring>#include<iostream>#include<vector>using namespace std;int T,n,m;char s[110];vector<int>vt[9];struct trie{int cnt;trie * nxt[26];};trie * init(int num){trie * p=new trie;p->cnt=num;for(int i=0;i<26;i++)p->nxt[i]=NULL;return p;}struct node{string s;int pro;}tot[110];void insert(trie *p,char *s,int num){int l=strlen(s);for(int i=0;i<l;i++){int j=s[i]-'a';if(p->nxt[j]==NULL){p->nxt[j]=init(num);}else{p->nxt[j]->cnt+=num;}p=p->nxt[j];}}void dfs(trie *p,char *s,int x,int l,string st){if(x!=0){if(p->cnt>tot[x].pro){tot[x].pro=p->cnt;tot[x].s=st;}}int j=s[x]-'0'-1;if(j==0)return;for(int i=0;i<vt[j].size();i++){int y=vt[j][i];char c=y+'a';if(p->nxt[y]==NULL)continue;dfs(p->nxt[y],s,x+1,l,st+c);}}int main(){int tt=0;for(int i=0;i<3;i++)vt[1].push_back(i);for(int i=3;i<6;i++)vt[2].push_back(i);for(int i=6;i<9;i++)vt[3].push_back(i);for(int i=9;i<12;i++)vt[4].push_back(i);for(int i=12;i<15;i++)vt[5].push_back(i);for(int i=15;i<19;i++)vt[6].push_back(i);for(int i=19;i<22;i++)vt[7].push_back(i);for(int i=22;i<26;i++)vt[8].push_back(i);scanf("%d",&T);while(T--){printf("Scenario #%d:\n",++tt);trie *p=init(1);scanf("%d%d",&n,&m);for(int i=0;i<n;i++){int c;scanf("%s%d",s,&c);insert(p,s,c);}scanf("%d",&m);for(int i=0;i<m;i++){for(int w=1;w<=105;w++)tot[w].pro=0;scanf("%s",s);int l=strlen(s);dfs(p,s,0,l,"");for(int i=1;i<l;i++){if(tot[i].pro)cout<<tot[i].s<<endl;elsecout<<"MANUALLY"<<endl;}cout<<endl;}cout<<endl;}return 0;}

原创粉丝点击