传送门:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832

题目大意:

给定strcmp实现如下:

int strcmp(char *s, char *t)
{
int i;
for (i=0; s[i]==t[i]; i++)
if (s[i]=='\0')
return 0;
return s[i] - t[i];
}

给定n个字符串,若两两比较一次,需要比较多少次?如that和than需要7次

大牛都去比赛了。渣渣只好继续敲代码练习。QAQ

第一次写左儿子右兄弟表示法,基本上参考大神的。

#include<cstdio>
#include<cstring>
const int MAXN = 4000 * 1000 + 10;
const int MAXLEN = 26;
char word[1024];
struct Trie
{
int son[MAXN]; // 第i个结点的左儿子编号
int brother[MAXN]; // 第i个结点的右兄弟编号
char ch[MAXN]; // 为第i个结点上的字符
int tot[MAXN]; // 第i个结点为根的子树包含的叶结点总数
int flag[MAXN]; //相同字符串的个数
int sz; // 结点总数
long long ans;
void init() { sz=1; ans=0; tot[0] = son[0] = brother[0] = flag[0] = 0; }
void insert(char *s)
{
ans+=tot[0]; //每插入一个总要和头结点比较
tot[0]++;
int len=strlen(s);
int u=0,v;
for(int i=0;i<len;i++)
{
bool find=false;
for(v=son[u];v!=0;v=brother[v])
if(ch[v]==s[i])
{
find=true;
break;
} if(!find)
{
v=sz++;
tot[v]=0;
flag[v]=0;
ch[v]=s[i];
brother[v]=son[u];
son[u]=v; //插入头部
son[v]=0;
} u=v;
ans=ans+tot[u]*2; //需要比较相等和不是'\0'
tot[u]++;
}
if(flag[v])ans+=flag[v];//统计相同字符串的个数
flag[v]++;
}
}trie; int main()
{
int kase = 1;
int n;
while(scanf("%d", &n) && n)
{
trie.init();
for(int i = 0; i < n; i++)
{
scanf("%s", word);
trie.insert(word);
}
printf("Case %d: %lld\n", kase++, trie.ans);
}
return 0;
}

UVA 11732 - strcmp() Anyone? 字典树的更多相关文章

  1. UVA 11732 - strcmp() Anyone?(Trie)

    UVA 11732 - strcmp() Anyone? 题目链接 题意:给定一些字符串,要求两两比較,须要比較的总次数(注意.假设一个字符同样.实际上要还要和'\0'比一次,相当比2次) 思路:建T ...

  2. 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?

    题目地址: option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2832&qu ...

  3. UVA 11732 strcmp() Anyone? (压缩版字典树)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. Uva 11732 strcmp()函数

    题目链接:https://vjudge.net/contest/158125#problem/A 题意: 系统中,strcmp函数是这样执行的,给定 n 个字符串,求两两比较时,strcmp函数要比较 ...

  5. UVA Phone List (字典树)(查询是否有前缀或自身是其他的前缀)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16341   Accepted: 5228 Descr ...

  6. UVa 11732 "strcmp()" Anyone? (左儿子右兄弟前缀树Trie)

    题意:给定strcmp函数,输入n个字符串,让你用给定的strcmp函数判断字符比较了多少次. 析:题意不理解的可以阅读原题https://uva.onlinejudge.org/index.php? ...

  7. uva 1519 - Dictionary Size(字典树)

    题目链接:uva 1519 - Dictionary Size 题目大意:给出n个字符串组成的字典.如今要加入新的单词,从已有单词中选出非空前缀和非空后缀,组成新单词. 问说能组成多少个单词. 解题思 ...

  8. UVA - 11732 "strcmp()" Anyone? (trie)

    https://vjudge.net/problem/UVA-11732 题意 给定n个字符串,问用strcmp函数比较这些字符串共用多少次比较. strcmp函数的实现 int strcmp(cha ...

  9. Uva 11732 strcmp() Anyone?

    strcmp() Anyone? Time Limit: 2000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Subm ...

随机推荐

  1. GridDataView实现 点击任意一格可以修改

    直接上代码好了 private void dgv1Member_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { string ...

  2. Linear Decoders

    Sparse Autoencoder Recap In the sparse autoencoder, we had 3 layers of neurons: an input layer, a hi ...

  3. LuoguP2756 飞行员配对方案问题(最大流)

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...

  4. 微信小程序从零开始开发步骤(二)创建小程序页面

    上一章注册完小程序,添加新建的项目,大致的准备开发已经完成,本章要分享的是 要创建一个简单的页面了,创建小程序页面的具体几个步骤: 1. 在pages 中添加一个目录 选中page,右击鼠标,从硬盘打 ...

  5. 【Uva 12093】Protecting Zonk

    [Link]: [Description] n个节点的树; 每个节点都可以选择3种 1.覆盖和它相连的边; c1花费; 2.覆盖和它相连的边以及和它相连的点相连的边; c2花费; 3.不进行操作 覆盖 ...

  6. RecyclerView具体解释

    public class RecyclerView extends ViewGroup implements ScrollingView, NestedScrollingChild { 由上面的继承结 ...

  7. Apache-DBUtils包对数据库的操作

    •commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装.学习成本极低.而且使用dbutils能极大简化jdbc编码的工作量,同一时候也不会影 ...

  8. onvif开发实战1--总结框架搭建

    Gsoap及开发框架生成: 一:gsoap下载和编译   1.下载Gsoap:地址:http://sourceforge.net/projects/gsoap2/files/gSOAP/ 2.安装: ...

  9. C#截取指定长度中英文字符串方法 (修改)

    public static string GetFirstString(string stringToSub, int length) { Regex regex = new Regex(" ...

  10. InstallShield详细制作说明(二)

    四.设置安装的组件Component