POJ 1816 Wild Words
来源:互联网 发布:matlab算矩阵乘法 编辑:程序博客网 时间:2024/05/17 23:30
对所有模式串建trie树,
对每一个字符串在trie树上进行DFS统计答案,
注意’*’可以包含任意多的字符,也不包含任何字符!
trie树好久没写,写不熟了。写的时候借鉴了一下各路神犇的代码^_^
#include<cstdio>#include<vector>#include<cstring>#define MAXN 100010#define MAXM 110using namespace std;int ans[MAXN], n, m;char s[25];struct node{ node *next[30]; vector<int> val; node(){memset(next,0,sizeof(next));}};struct TRIE{ int len; node *root; void pre(){root = new node();} int idx(char ch) { if(ch=='?')return 'z'-'a'+1; if(ch=='*')return 'z'-'a'+2; else return ch-'a'; } void insert(char *s, int id) { len=strlen(s); node *p=root; for(int i = 0; i < len; i++) { int c = idx(s[i]); if(!p->next[c]) p->next[c]=new node(); p=p->next[c]; } p->val.push_back(id); } void dfs(char *s, node *p, int pos) { if(s[pos]==0) { for(int i = 0; i < p->val.size(); i++) { ans[p->val[i]]=1; } if(p->next[idx('*')]) dfs(s,p->next[idx('*')],pos); } else { int c=idx(s[pos]); if(p->next[c])dfs(s,p->next[c],pos+1); if(p->next[idx('?')])dfs(s,p->next[idx('?')],pos+1); if(p->next[idx('*')]) for(int i = pos; i <= len; i++) dfs(s,p->next[idx('*')],i); } } void find(char *s) { len=strlen(s); memset(ans,0,sizeof(ans)); dfs(s,root,0); bool mat=0; for(int i = 1; i <= n; i++) { if(ans[i]) { mat=1; printf("%d ",i-1); } } if(!mat) printf("Not match"); printf("\n"); }}trie;int main(){ scanf("%d%d",&n,&m); trie.pre(); for(int i = 1; i <= n; i++) { scanf("%s",s); trie.insert(s,i); } for(int i = 1; i <= m; i++) { scanf("%s",s); trie.find(s); } return 0;}
1 0
- POJ 1816 Wild Words
- POJ 1816 Wild Words
- poj 1816-Wild Words
- POJ 1816 Wild Words
- POJ 1816 Wild Words 笔记
- poj 1816 Wild Words(字典树+DFS)
- POJ - 1816 Wild Words(字典树变题)
- POJ 1816 Wild Words 字典树+DFS
- poj 字符串相关之1816 Wild Words
- pku 1816Wild Words
- POJ 1816 Wild Words(trie 树上的DFS)
- POJ 1816 Wild Words(字典树+dfs)
- poj 1816Wild Words(字典树+dfs)
- ’?’&&’*‘多对多代替字符匹配 Trie POJ 1816 Wild Words
- pku1816 Wild Words (trie)
- poj1816 Wild words
- POJ1816 Wild Words Trie+Dfs
- POJ1816--Wild Words(Trie+搜索)
- <转载>struts2 s:property 用法
- maven配置文件
- 实验三:静态路由的配置
- ES6 你可能不知道的事 – 基础篇
- 鼠标左键右键不触发事件的原因
- POJ 1816 Wild Words
- spring
- Leetcode31 Next Permutation
- 阿里云配置sshd保持ssh连接
- 老王的宝贝们
- 前端自动化测试
- 第一个Netty程序
- windows和android调用第三方C++库(静态库lib、动态库dll)
- HDU-5778 abs