POJ 1816 Wild Words
2016-07-31 14:15
197 查看
对所有模式串建trie树,
对每一个字符串在trie树上进行DFS统计答案,
注意’*’可以包含任意多的字符,也不包含任何字符!
trie树好久没写,写不熟了。写的时候借鉴了一下各路神犇的代码^_^
对每一个字符串在trie树上进行DFS统计答案,
注意’*’可以包含任意多的字符,也不包含任何字符!
trie树好久没写,写不熟了。写的时候借鉴了一下各路神犇的代码^_^
#include<cstdio> #include<vector> #include<cstring> #define MAXN 100010 #define MAXM 110 using 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; }
相关文章推荐
- poj 1816 Wild Words
- POJ 1816 Wild Words
- poj 1816-Wild Words
- [poj] 1816 Wild words
- POJ 1816 Wild Words
- POJ 1816 Wild Words
- POJ 1816 Wild Words 笔记
- poj 1816Wild Words(字典树+dfs)
- 【POJ】1816 Wild Words
- POJ 1816 Wild Words 字典树+DFS
- POJ 1816 Wild Words(字典树+dfs)
- poj 1816 (Trie + dfs)
- poj 1816 (Trie + dfs)
- 【HDU】1816 Get Luffy Out * &【POJ】2723 Get Luffy Out 【2-sat】
- POJ-1816 拨钟问题
- POJ 1816 Wild Words
- POJ 1816 字典树+DFS
- HDU 1816, POJ 2723 Get Luffy Out(2-sat)
- POJ 2723 && HDU 1816 Get Luffy Out(2-SAT+二分)
- ’?’&&’*‘多对多代替字符匹配 Trie POJ 1816 Wild Words