jsnjzlw 发表于 2015-4-3 13:33:16

Hyper Prefix Sets

本帖最后由 wuyvzhang 于 2016-8-2 17:24 编辑 <br /><br />  题意:给你n个串,对于一个前缀,如果出现k次,就会得到前缀的长度*k,现在让你求长度*k的最大值。
  题解:用trie树来搞。把每个串插入到trie中,记录每个子串出现的次数以及长度,trie树很容易实现,然后插完之后,把每个节点遍历一遍,求最大的len*sum,输出即可。

1 #include
2 #include
3 #include
4 using namespace std;
5 const int maxnode = 4000 * 1000 + 10;
6 const int sigma_size = 26;
7 char word;
8 int n,m;
9 int sz;
10 struct Trie {
11   int head; // head为第i个结点的左儿子编号
12   int next; // next为第i个结点的右兄弟编号
13   char ch;// ch为第i个结点上的字符
14   int sum;
15   int len;
16   void clear() {
17   sz = 1;
18   head = next = 0;
19   memset(len,0,sizeof(len));
20   memset(sum,0,sizeof(sum));
21   }
22   void insert(const char *s,int form ,int to) {
23   int u = 0, v;
24   for(int i = form; i

www.138632.com SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投i注任何游戏顶级信用i提现即时到账SO.CC
页: [1]
查看完整版本: Hyper Prefix Sets