2#include3#include4#include

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

POJ 1816 Wild Words

系統(tǒng) 1631 0

題目大意:

給出N個(gè)帶通配符(?和*)的模式串, M個(gè)詢問(wèn), 詢問(wèn)一個(gè)給你的字符串能匹配哪些模式串. 模式串長(zhǎng)度不超過(guò)6, 詢問(wèn)串長(zhǎng)度不超過(guò)20.

?

簡(jiǎn)要分析:

帶通配符AC自動(dòng)機(jī)? 不是的, 看字符串的長(zhǎng)度都那么小, 暴力一下就可以了. 把所有模式串丟到Trie里面, *和?也作為一種轉(zhuǎn)移, 對(duì)于每個(gè)詢問(wèn)串, 暴力dfs就可以了.

?

代碼實(shí)現(xiàn):

View Code
        
           1
        
         #include <cstdio>
        
2 #include <cstdlib>
3 #include <cstring>
4 #include <vector>
5 #include <algorithm>
6 using namespace std;
7
8 const int MAX_N = 100000 , MAX_M = 100 , P_LEN = 6 , W_LEN = 20 ;
9 int n, m;
10 char p[P_LEN + 1 ], w[W_LEN + 1 ];
11
12 #define pb push_back
13
14 namespace trie {
15 const int MAX_NODE = 200000 , SON = 28 ;
16
17 struct node_t {
18 vector < int > v;
19 node_t *son[SON];
20 node_t() { v.clear(), memset(son, 0 , sizeof (son)); }
21 } node_pool[MAX_NODE + 1 ], *node_idx = node_pool, *root = NULL;
22
23 node_t *node_alloc() {
24 return node_idx ++;
25 }
26
27 void init() {
28 root = node_alloc();
29 }
30
31 void ins( int id, char *str) {
32 node_t *pos = root;
33 while (*str) {
34 int t = *(str ++);
35 t = (t == ' ? ' ? 26 : (t == ' * ' ? 27 : t - ' a ' ));
36 if (!pos -> son[t]) pos -> son[t] = node_alloc();
37 pos = pos -> son[t];
38 }
39 pos -> v.pb(id);
40 }
41
42 vector < int > ans;
43 int sz;
44
45 void dfs( char *str, node_t *pos, int idx) {
46 if (str[idx] != 0 ) {
47 int t = str[idx] - ' a ' ;
48 if (pos -> son[t]) dfs(str, pos -> son[t], idx + 1 );
49 if (pos -> son[ 26 ]) dfs(str, pos -> son[ 26 ], idx + 1 );
50 if (pos -> son[ 27 ])
51 for ( int i = idx; i <= sz; i ++) dfs(str, pos -> son[ 27 ], i);
52 }
53 else {
54 for ( int i = 0 , rb = pos -> v.size(); i < rb; i ++) ans.pb(pos -> v[i]);
55 if (pos -> son[ 27 ]) dfs(str, pos -> son[ 27 ], idx);
56 }
57 }
58
59 void go( char *str) {
60 ans.clear();
61 sz = strlen(str);
62 dfs(str, root, 0 );
63 sort(ans.begin(), ans.end());
64 ans.resize(distance(ans.begin(), unique(ans.begin(), ans.end())));
65 if (!ans.size()) printf( " Not match\n " );
66 else {
67 for ( int i = 0 , rb = ans.size(); i < rb; i ++) printf( " %d " , ans[i]);
68 printf( " \n " );
69 }
70 }
71 }
72
73 int main(){
74 scanf( " %d%d " , &n, &m);
75 trie::init();
76 for ( int i = 0 ; i < n; i ++) {
77 scanf( " %s " , p);
78 trie::ins(i, p);
79 }
80 for ( int i = 0 ; i < m; i ++) {
81 scanf( " %s " , w);
82 trie::go(w);
83 }
84 return 0 ;
85 }

POJ 1816 Wild Words


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日日艹夜夜| 美女一级毛片免费观看 | 无毒不卡在线观看 | 在线观看视频色 | 在线国产一区二区三区 | 久久这里有精品视频任我鲁 | 精品无码久久久久久久动漫 | 一区二区在线播放福利视频 | 亚洲毛片在线 | 国产精品一区二区资源 | 日本高清有码 | 99国产精品欧美久久久久久影院 | 精品三级国产一区二区三区四区 | 狠狠躁夜夜躁人人爽天天3 狠狠躁夜夜躁人人爽天天miya | 久草免费新视频 | 乱人伦中文视频在线 | 国产综合网站 | 99精品免费在线观看 | 一级激情视频 | 日本一级高清不卡视频在线 | 不卡视频免费在线观看 | 99热久久精品国产 | 久一视频在线观看 | 四虎亚洲精品 | 免费日b视频 | 天天操天天干天天操 | 久久久99精品免费观看 | 亚洲一区二区视频在线观看 | 丝袜亚洲精品中文字幕一区 | 色综合合久久天天给综看 | 国产欧美一区二区 | 美女又黄又免费视频 | 日韩在线视精品在亚洲 | 久久这里是精品 | 49xxx中国妇女内谢视频 | 一区二区三区四区在线 | 四虎精品永久在线 | 久草在线观看免费 | 日韩精品一区二区在线观看 | 国产精品久草 | 不卡中文字幕 |