else{68if(p->next[getID(str[pos])]) dfs(p->next[getID(str[pos])], pos +1);69if(p->next[26]) dfs(p->next[26], pos +1);70if(p->next[27]) {71REP(i, pos, N) dfs(p->next[27], i);72}73}74}757677intmain()78{79cin >> N >>M;80root =newTrie();81REP(i,0,...
【POJ】1816 Wild Words DFS+字典树。题目数据很BT。注意控制DFS深度小于等于len。当'\0'时,还需判断末尾*。另外,当遇到*时,注意讨论情况。 1#include <iostream>2#include <cstdio>3#include <cstring>4#include <cstdlib>5#include <vector>6#include <algorithm>7usingnamespacestd;89#defineTRIEN 281011ty...
}edge[maxn];inthead[maxn],cnt=0,cnt1=1;voidadd(intu,charc){ cnt++;cnt1++; edge[cnt].se=c; edge[cnt].to=cnt1; edge[cnt].nxt=head[u]; head[u]=cnt;return; }voidinsert(intk){intu=1;intl=strlen(s);for(inti=0;i<l;i++){intv=-1;charc=s[i];for(intj=head[u];j;...
POJ 1816 Trie 查看原文 Python字符串——不可变序列 Python中没有单个字符,只有字符串(单个字符也是字符串)字符串是序列的代表。 空字符串——''或"" 常见字符串表达式和字符串常量 支持正则表达式:import re——模块字符串合并——‘+’ 组成元组:在字符串间加了‘,’ raw字符串抑制转义...
hdu1816 + POJ 2723开锁(二分+2sat) 题意: 有m层门,我们在最外层,我们要一层一层的进,每一层上有两把锁,我们只要开启其中的一把们就会开,我们有n组钥匙,每组两把,我们只能用其中的一把,用完后第二把瞬间就会消失,问你最多能开到多少层们。
5 4 t* ?h*s ??e* *s ?*e this the an is 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Sample Output 0 1 3 0 2 4 Not match 3 1. 2. 3. 4. Source POJ Monthly 大致题意:给n个模式串和m个字符串,*可以代表任意字符串(空串),?只能代表一个特定字符,问每个字符串有哪些模式串与它匹...
{ b=0;for(intj=head[now];j;j=edge[j].next)if(edge[j].to==s[i]) b=1,now=j;if(!b)add(now,s[i]),now=head[now]; } edge[now].v.push_back(x); edge[now].is=1; }voidcheck(intnow,intpos){if(pos==l+1) {if(edge[now].is) ...
POJ1816 Wild words 传送门 这道题能想到是trie树+搜索,不过在trie树上dfs确实让人大开眼界…… 具体怎么做呢?首先我们可以按照模式串来建立一棵trie树,不过这样的话空间限制是一个问题。解决的方法是把trie树像建图一样用链式前向星去存储,这样的话就节省了很多空间(具体怎么实现可以看代码,还是很简单的)。
POJ1816 Wild Words 刚开始我以为要用模板串建trie树,发现m只有100,而n有100000,所以应该用带符号的串建树。 然后模板串的长度很小,所以在trie树上dfs即可。 这道题串可能有重,比如有一个t?k和t?k,应该输出2和3。而且因为*可以是空字符,所以,对于每一个询问的答案也应该去重。
POJ1816 Wild Words 嘟嘟嘟 刚开始我以为要用模板串建trie树,发现m只有100,而n有100000,所以应该用带符号的串建树。 然后模板串的长度很小,所以在trie树上dfs即可。 这道题串可能有重,比如有一个t?k和t?k,应该输出2和3。而且因为*可以是空字符,所以,对于每一个询问的答案也应该去重。