2#include3#include4#include

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

POJ 1816 Wild Words

系統 1709 0

題目大意:

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

?

簡要分析:

帶通配符AC自動機? 不是的, 看字符串的長度都那么小, 暴力一下就可以了. 把所有模式串丟到Trie里面, *和?也作為一種轉移, 對于每個詢問串, 暴力dfs就可以了.

?

代碼實現:

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一级淫片1000部 | 成人免费久久精品国产片久久影院 | 日韩精品福利视频一区二区三区 | 婷婷色综合久久 | 日韩在线免费 | 日韩精品一区二区在线观看 | 久久久久久国产精品免费免费 | 日韩一区二区三区在线看 | 99久久久国产精品免费观看 | 国产亚洲女人久久久久久 | 丝袜美腿一区二区三区动态图 | 青青青国产观看免费视频 | 亚洲一区免费看 | 在线播放中文字幕 | 日韩电影网站 | 亚洲欧美日本在线观看 | 亚洲精品一区中文字幕乱码 | 欧美永久免费 | 欧美成人区 | 一道本不卡一区 | 亚洲精品在线视频观看 | 久久久久伊人 | 久久永久免费中文字幕 | 欧日韩不卡在线视频 | 久久精品免费视频观看 | 精品天堂 | 日韩欧美视频一区二区在线观看 | 国产999精品久久久影片官网 | 2021中文字幕亚洲精品 | 九月激情网 | 国产乱肥老妇国产一区二 | 96精品专区国产在线观看高清 | 免费午夜电影 | 亚洲人成亚洲人成在线观看 | 91精品福利| 国产精品va在线观看无 | 欧美一区视频 | 啪啪在线| 综合国产 | 免费成人福利视频 | 午夜在线视频一区二区三区 |