字典树trie——洛谷P2580 于是他错误的点名开始了

洛谷P2580 于是他错误的点名开始了


是字典树的板子题目,这里重复的话可以对exist进行处理,如果说第一次遇到的情况是exist是1的话,这就说明她是一个被第一次访问并且是存在的单词,然后对exist进行加1操作,我觉的这个就是个小技巧,子啊学习二分图中的匈牙利算法的时间戳优化学习到的,还是挺实用的,注意这里要把maxn开大一点,我觉的这里是题目的问腿,明明说是只有10000个,但其实不止。

 1 #include<iostream>
 2 #include<string>
 3 #include<cstdio>
 4 #include<cstring>
 5 using namespace std;
 6 const int len = 55;
 7 const int maxn = 500010;
 8 
 9 struct trie{
10     int next[maxn][27];
11     int cnt;
12     int exist[maxn];
13     void ini()
14     {
15         memset(next, 0, sizeof(next));
16         memset(exist, 0, sizeof(exist));
17         cnt = 1; //0号结点是空的,所以新创建的结点是1开始的 
18     }
19     void insert(string str)
20     {
21         int l = str.size();
22         int p = 0;
23         for(int i = 0; i < l; i++)
24         {
25             int v = str[i]-'a';
26             if(!next[p][v])
27                 next[p][v] = cnt++;
28             p = next[p][v];
29         }
30         exist[p] = 1; 
31     }
32     int find(string str)
33     {
34         int l = str.size();
35         int p = 0;
36         for(int i = 0; i < l; i++)
37         {
38             int v = str[i]-'a';
39             if(next[p][v]) p = next[p][v];
40             else
41             {
42                 printf("WRONG\n");
43                 return 0;        
44             } 
45         }
46         if(exist[p] == 0)
47         {
48             printf("WRONG\n");        
49         }
50         else if(exist[p] == 1)
51         {
52             printf("OK\n");
53             exist[p]++;
54         }
55         else
56         {
57             printf("REPEAT\n");
58         }
59         return 1;
60     } 
61 };
62 int main()
63 {
64     int n;
65     scanf("%d", &n);
66     string str;
67     struct trie root;
68     root.ini();
69     for(int i = 0; i < n; i++)
70     {
71         cin >> str;
72         root.insert(str);
73     }
74     int m;
75     cin >> m;
76     for(int i = 0; i < m; i++)
77     {
78         cin >> str;
79         root.find(str);
80     }
81     return 0;    
82 } 

 

posted @ 2020-08-12 11:48  斌斌翻水水  阅读(112)  评论(0)    收藏  举报