lcp计数 (Trie)
来源:互联网 发布:免费源码分享网站 编辑:程序博客网 时间:2024/05/17 23:23
lcp
思路:
看着挺唬人的,其实是道水题。
考虑每个子串作为lcp的贡献,就是包含这个子串的字符串的两两组合。
#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <iostream>#define N 1000005#define LL long longusing namespace std;int n, rot, cnt; int c[N][26], sum[N];char s[N];LL ans;void insert(char *s){ int p = rot, len = strlen(s); for(int i=0; i<len; i++){ int x = c[p][s[i] - 'a']; if( !x ) c[p][s[i] - 'a'] = ++cnt; p = c[p][s[i] - 'a']; sum[p]++; }}void query(){ int p = rot; queue<int> q; q.push( p ); while( !q.empty() ){ int u = q.front(); q.pop(); for(int i=0; i<26; i++){ int v = c[u][i]; if( !v ) continue; ans += (1LL * sum[v] * (sum[v] - 1) / 2); //一共有sum[v]个字符串中,包含v这个子串 //那么v作为lcp的贡献就有C(2,sum[v]) q.push( v ); } }}int main(){ scanf("%d", &n); rot = cnt = 1; for(int i=1; i<=n; i++){ scanf("%s", s); insert( s ); } query(); cout << ans << endl;}
阅读全文
0 0
- lcp计数 (Trie)
- Trie(字典树):大LCP
- 【字符串】【Trie】lcp 题解
- CodeForces 566 A Matching Names(Trie 匹配LCP和最大)
- POJ 2001 Shortest Prefixes 【LCP(Trie)】
- [Trie树] 文件夹计数
- (others)LCP
- LCP
- LCP
- [jzoj3126]【GDKOI2013选拔】大LCP(字典树解LCP)
- 最长公共前缀(LCP)
- ural1297Palindrome (后缀数组+lcp)
- 【LA3942】Remember the Word【Trie】【计数DP】
- HDU 6059 Kanade's trio Trie + 计数
- 多对多LCP和最大 Trie DFS CodeForces - 566A Matching Names
- codeforces367(字符串hash求lcp比较大小,Trie解最大异或问题)
- (模板)后缀数组(lcp和rmq)
- (others)LCP建立链路
- Codeforces Round #438 B
- web服务器请求响应全过程
- 光纤激光输出的功率均匀性测试
- 函数模板
- dfs学习之n皇后问题
- lcp计数 (Trie)
- python爬虫实战二——股票数据定向爬虫【有补充】
- 笔记:SEO在网站制作中的应用
- 第十一课、C判断
- c python shell获得文件路径以及所有的文件
- 文章标题
- c++静态函数和变量
- 各数据类型大小
- pata1056