hdu 1277 全文检索
来源:互联网 发布:linux新建文档命令 编辑:程序博客网 时间:2024/04/27 02:02
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1277
题目大意及思路:和前一个题相同,只是这个题要求输出id。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x3f3f3f3f#define Max 11000char s[60010],str[66];int ans[1010],rec;char st[60010];int max(int a,int b){return a>b?a:b;}int min(int a,int b){return a<b?a:b;}int q[Max*60],cnt;struct node{ int id,fail; int next[10]; void init() { id=fail=0; memset(next,0,sizeof(next)); }}tri[Max*60];void insert(char *s,int num){ int i,p,id; p=0; for(i=0;s[i];i++) { id=s[i]-'0'; if(!tri[p].next[id]) { tri[++cnt].init(); tri[p].next[id]=cnt; } p=tri[p].next[id]; } tri[p].id=num;}void bfs(){ int i,id,suf,p,head,tail; p=0;head=tail=0; for(i=0;i<10;i++) { if(tri[0].next[i]) { q[tail++]=tri[0].next[i]; tri[q[tail-1]].fail=0; } else tri[0].next[i]=0; } while(head<tail) { //printf("akkkk"); p=q[head++];suf=tri[p].fail; for(i=0;i<10;i++) { if(tri[p].next[i]) { q[tail++]=tri[p].next[i]; tri[q[tail-1]].fail=tri[suf].next[i]; } else { tri[p].next[i]=tri[suf].next[i]; } } }}int query(char *s){ int i,id,p,tmp; p=0; for(i=0;s[i];i++) { id=s[i]-'0'; p=tri[p].next[id]; tmp=p; if(tmp&&tri[tmp].id!=-1) { if(tri[tmp].id) ans[rec++]=tri[tmp].id; tri[tmp].id=-1; tmp=tri[tmp].fail; } } return rec;}int main(){ int n,m,i; while(scanf("%d%d",&m,&n)!=EOF) { s[0]=0; tri[0].init(); cnt=0; rec=0; while(m--) { scanf("%s",st); strcat(s,st); } // printf("%s\n",s); for(i=1;i<=n;i++) { scanf("%s%s%s%s",str,str,str,str); insert(str,i); } bfs(); if(query(s)==0) puts("No key can be found !"); else { printf("Found key:"); for(i=0;i<rec;i++) { printf(" [Key No. %d]",ans[i]); } puts(""); } }}
- hdu 1277 全文检索
- hdu 1277 全文检索
- hdu 1277 全文检索
- hdu 1277 全文检索
- HDU 1277 - 全文检索
- hdu 1277 全文检索
- hdu 1277 全文检索
- hdu 1277 全文检索 ac 自动机
- 杭电 hdu 1277 全文检索
- hdu 1277 全文检索(AC自动机)
- HDU 1277 全文检索 (Trie树应用 好题)
- hdu 1277 全文检索(ac自动机模板)
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- eclipse调试开源代码方法
- 不用判断语句,求两个数的最大值
- 欧拉路和欧拉图
- PID参数调节总结
- log4net 在VS2010 NET4下的使用
- hdu 1277 全文检索
- 源码安装软件 pkgconfig ld.so.conf ldconfig
- 五、工厂模式
- eclipse安装ADT插件
- Completion
- 序列容器(list)
- linux UART串口驱动开发文档
- Windows Phone开发(42):缓动动画
- 关于《学习基于ARM平台的嵌入式系统》的收获和思考