会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
c语言源码
poj 1451
dfs+字典树
(方法很暴力。。)
#include<cstdio> #include<cstring> #include<cstdlib> const int Max=26; using namespace std; struct trie{ struct trie * next[Max]; int flag; trie(){ flag=0; for( int i = 0; i < 26; i++ ) next[i] = NULL; } }node; struct trie * root; char ans[120],temp[120]; int max; char f[15][6]={{""},{""},{"abc"},{"def"},{"ghi"},{"jkl"},{"mno"},{"pqrs"},{"tuv"},{"wxyz"}}; void insert(char * str,int fre){ int i,len,tem; struct trie* p,*q; p=root; len=strlen(str); for(i=0;i<len;i++){ tem=str[i]-'a'; if(p->next[tem]!=NULL){ p=p->next[tem]; p->flag+=fre; } else{ q=(struct trie *)calloc(1,sizeof(struct trie )); p->next[tem]=q; p=q; p->flag+=fre; } } } void search(int num,int pos,struct trie * tem,char * str){ struct trie * p; int i,len; int thislevel=str[pos]-'0'; len=strlen(f[thislevel]); for(i=0;i<len;i++){ if(tem->next[f[thislevel][i]-'a']==NULL) continue; temp[pos]=f[thislevel][i]; p=tem->next[f[thislevel][i]-'a']; if(pos==num){ if(p->flag>max){ max=p->flag; temp[pos+1]='\0'; strcpy(ans,temp); } } else search(num,pos+1,p,str); } } void find(char * str){ int i,len,tem; struct trie * p; p=root; len=strlen(str); for(i=0;i<len-1;i++){ max=0; search(i,0,root,str); if(max==0){ printf("MANUALLY\n"); i++; break; } else printf("%s\n",ans); } while(i<len-1){ printf("MANUALLY\n"); i++; } } int main(){ int T,t,n,i; char s[120]; int fre; int yes; scanf("%d",&T); for(t=1;t<=T;t++){ printf("Scenario #%d:\n",t); scanf("%d",&n); root=(struct trie *)calloc(1,sizeof(node)); for(i=1;i<=n;i++){ scanf("%s %d",s,&fre); insert(s,fre); } scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%s",s); find(s); printf("\n"); } printf("\n"); } }
posted on
2012-06-26 16:12
c语言源码
阅读(
155
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
导航
博客园
首页
新随笔
联系
订阅
管理
公告