POJ 2945 Trie

本文介绍了一种使用字典树解决字符串统计问题的方法,具体为统计给定字符串集合中每个字符串出现1到n次的数量。通过构建字典树并更新计数,实现了高效统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:

http://poj.org/problem?id=2945

题解:

给你n个字符串,统计出现1~n次的字符串各有多少个

题解:

这道题最快的做法应该就是字典树了吧,边插入边更新答案就行了

代码:

31 int cnt[MAXN];
32 int pi = 1;
33 
34 struct Node {
35     int next[26];
36     int sum;
37 }tree[MAXN * 20];
38 
39 void insert(string keyword) {
40     int index, p, i;
41     for (i = p = 0; keyword[i]; i++) {
42         index = keyword[i] - 'A';
43         if (tree[p].next[index] == 0)
44             tree[p].next[index] = pi++;
45         p = tree[p].next[index];
46     }
47     cnt[tree[p].sum++]--;
48     cnt[tree[p].sum]++;
49 }
50 
51 int main() {
52     int n, m;
53     while (cin >> n >> m, n) {
54         memset(tree, 0, sizeof(tree));
55         memset(cnt, 0, sizeof(cnt));
56         pi = 1;
57         rep(i, 0, n) {
58             string s;
59             cin >> s;
60             insert(s);
61         }
62         rep(i, 1, n + 1) printf("%d\n", cnt[i]);
63     }
64     return 0;
65 }

 

                               

  

转载于:https://www.cnblogs.com/baocong/p/6790396.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值