UVA 11732 strcmp() Anyone?(左儿子右兄弟Trie)
来源:互联网 发布:淘宝宝贝排行榜代码 编辑:程序博客网 时间:2024/05/21 18:41
UVA 11732 strcmp() Anyone?(左儿子右兄弟Trie)
ACM
题目地址:
UVA 11732 strcmp() Anyone?
题意:
问strcmp函数的==
语句执行了几次。
分析:
大白上的题目。
听说要用左儿子右兄弟的Trie,比较省空间,顺便学了下。
开始先建树记录次数,然后再遍历统计,结果错了...
后面参考了Shoutmon巨巨的写法,一边insert一边统计。
代码:
/** Author: illuz <iilluzen[at]gmail.com>* File: uva11732.cpp* Create Date: 2014-09-24 10:30:15* Descripton: trie son brother*/#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define repf(i,a,b) for(int i=(a);i<=(b);i++)typedef long long ll;const int N = 0;const int MAXNODE =4000010;int n, cas;ll ans;char str[4001];struct STrie {int son[MAXNODE];int bro[MAXNODE];int val[MAXNODE];char ch[MAXNODE];int sz;STrie() { sz = 1; ch[0] = val[0] = bro[0] = son[0] = 0; }void init() { sz = 1; ch[0] = val[0] = bro[0] = son[0] = 0; }// inline int idx(char c) { return c - 'a'; }void insert(char *s) {int len = strlen(s), u = 0, p;repf (i, 0, len) {// check the brother of ufor (p = son[u]; p; p = bro[p]) {if (ch[p] == s[i])break;}// cannot find out than insertif (!p) {p = sz++;ch[p] = s[i];bro[p] = son[u];son[p] = 0;val[p] = 0;son[u] = p;}ans += (val[u] - val[p]) * (2 * i + 1);if (len == i) {ans += val[p] * (2 * i + 2);val[p]++;}val[u]++;u = p;}}} trie;int main() {// ios_base::sync_with_stdio(0);while (~scanf("%d", &n) && n) {trie.init();ans = 0;repf (i, 0, n - 1) {scanf("%s", str);trie.insert(str);}printf("Case %d: %lld\n", ++cas, ans);}return 0;}
0 0
- UVA 11732 strcmp() Anyone?(左儿子右兄弟Trie)
- UVA 11732("strcmp()" Anyone?-Trie与左兄弟右儿子)
- 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?
- Uva 11732 "strcmp()" Anyone? 左儿子右兄弟的trie
- UVA 11732-"strcmp()" Anyone?-trie(左儿子右兄弟表示法(省空间))
- UVA 11732 "strcmp()" Anyone? Trie树 + 树的左儿子右兄弟存储法
- uva 11732 "strcmp()" Anyone? (trie+左儿子右兄弟表示法)
- (uva 11732) "strcmp()" Anyone? (trie+左儿子右兄弟表示法)
- UVA 11732 strcmp() Anyone? Trie的左儿子右兄弟表示法
- UVA 11732 strcmp() Anyone 左兄弟右孩子Trie
- UVA 11732 "strcmp()" Anyone(字典树+左儿子-右兄弟表示法)
- UVa 11732 strcmp函数 trie树 左儿子右兄弟表示法
- UVA 11732 strcmp() Anyone?(trie)
- UVA 11732 "strcmp()" Anyone? (Trie)
- trie树 和 树的存储--左儿子右兄弟 --- uva 11732
- UVA 11732 strcmp() Anyone (Trie)
- UVA 11732 - strcmp() Anyone?(Trie)
- UVA 11732 strcmp() Anyone? (Trie)
- 价值
- 习惯决定成功与否
- 音频混合的方法
- 【索引】Codeforces Round #257 (Div. 2)
- HTML
- UVA 11732 strcmp() Anyone?(左儿子右兄弟Trie)
- 教你怎样用unity3d发布一个Android的apk文件.绝对精细
- eclise 注释模板
- UVA - 10815 Andy's First Dictionary
- Sed
- 数据库中varchar与nvarchar
- uva10026Shoemaker's Problem
- js页面跳转整理 .
- c#反射技术