UVA 11732 strcmp() Anyone (Trie+链表)
先两两比较,比较次数是两者相同的最长前缀长度*2+1,比较特殊的情况是两者完全相同时候比较次数是单词长度*2+2,
两个单词'末尾\0'和'\0'比较一次,s尾部'\0'和循环内'\0'比较一次。
因此,对于一个单词,只要知道和它某个相同的最长前缀的单词数就可以计算出方案数了。
用tire,记录一颗子树上的结点数cnt[u](用于计算当前前缀是最长前缀的单词数)和在某个结点终止的单词数val[u](处理特殊情况)。
因为字符集比较大,可能会有较大的空间浪费,所以用一个链式的结构保存子节点。(查找子节点的时候效率会低一些)。
如果插完了以后再统计的话一个前缀会被算2次,要除以2。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxnds = *+; char ch[maxnds];//用来保存结点的字符值
int cnt[maxnds];
int son[maxnds],bro[maxnds]; //son是链表头,bro[u]表示u的下一个兄弟结点
int val[maxnds];
int nds;//nds是下一个可以分配的结点
void init()
{
nds = ; cnt[] = son[] = val[] = ;
} ll add(char *s)
{
ll ret = ;
int u = ,v,i;
for(i = ; s[i]; i++){
for(v = son[u]; v; v = bro[v]){
if(ch[v] == s[i]) break;
}
if(!v){
//初始化新结点
bro[nds] = son[u];
ch[nds] = s[i];
val[nds] = cnt[nds] = son[nds] = ;
//把新结点插到链表头,并分配下一个结点
v = son[u] = nds++;
}
ret += (cnt[u]-cnt[v])*(i<<|);
cnt[u]++;
u = v;
}
if(val[u]) ret += val[u]*((i+)<<);
ret += (cnt[u]-val[u])*(i<<|);
cnt[u]++; val[u]++;
return ret;
} char str[];
int main()
{
//freopen("in.txt","r",stdin);
int N,kas = ;
while(scanf("%d\n",&N),N){
ll ans = ;
init();
while(N--){
gets(str);
ans += add(str);
}
printf("Case %d: %lld\n",++kas,ans);
}
return ;
}
UVA 11732 strcmp() Anyone (Trie+链表)的更多相关文章
- UVA 11732 - strcmp() Anyone?(Trie)
UVA 11732 - strcmp() Anyone? 题目链接 题意:给定一些字符串,要求两两比較,须要比較的总次数(注意.假设一个字符同样.实际上要还要和'\0'比一次,相当比2次) 思路:建T ...
- 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?
题目地址: option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2832&qu ...
- UVa 11732 "strcmp()" Anyone? (左儿子右兄弟前缀树Trie)
题意:给定strcmp函数,输入n个字符串,让你用给定的strcmp函数判断字符比较了多少次. 析:题意不理解的可以阅读原题https://uva.onlinejudge.org/index.php? ...
- UVA 11732 strcmp() Anyone?(Trie的性质)
strcmp() Anyone? strcmp() is a library function in C/C++ which compares two strings. It takes two st ...
- UVA - 11732 "strcmp()" Anyone? (trie)
https://vjudge.net/problem/UVA-11732 题意 给定n个字符串,问用strcmp函数比较这些字符串共用多少次比较. strcmp函数的实现 int strcmp(cha ...
- Trie UVA 11732 "strcmp()" Anyone?
题目传送门 题意:询问所有字符串的比较次数和(注意for循环内的比较也算) 分析:将所有字符串插入到字典树上,然后结点信息记录有几个字符串,那么每走到一个结点就能知道比较到此时需要的次数.学习到链表存 ...
- UVA - 11732 "strcmp()" Anyone?左兄弟右儿子trie
input n 2<=n<=4000 s1 s2 ... sn 1<=len(si)<=1000 output 输出用strcmp()两两比较si,sj(i!=j)要比较的次数 ...
- uva 11732 - strcmp() Anyone? 不错的Trie题
题解:http://blog.csdn.net/u013480600/article/details/23122503 我的代码一直TLE,,,看了人家的之后,认为1.链式前向星比較好,2.*dept ...
- Uva 11732 strcmp()函数
题目链接:https://vjudge.net/contest/158125#problem/A 题意: 系统中,strcmp函数是这样执行的,给定 n 个字符串,求两两比较时,strcmp函数要比较 ...
随机推荐
- 附近wifi都是你的
今天给大家介绍deauth攻击. 最终效果:附近你指定的任何wifi,别人都无法连接,即便连接上的也会断掉. 由于我在 “世界虽大,但没有破不了的wifi” 这篇文章中写的很详细,所以我在这里就步详 ...
- HDU - 1150 POJ - 1325 Machine Schedule 匈牙利算法(最小点覆盖)
Machine Schedule As we all know, machine scheduling is a very classical problem in computer science ...
- Sybase.在PowerDesigner中如何添加-约束
Sybase.在PowerDesigner中如何添加-约束 资料 2010-06-23 08:57:09 阅读21 评论0 字号:大中小 订阅 唯一约束 唯一约束与创建唯一索引基本上是一回事,因为 ...
- ColorMask与Blend
Shader "N/T" { Properties { _Color ("Texture to blend", Color) = (1,1,1,1) } Sub ...
- 免打包:简单、灵活、便捷的APP渠道统计方法
相信做过APP运营推广的小伙伴们应该对APP渠道统计并不陌生吧.APP推广运营人员需要根据数据来评估渠道推广的效果,找到最适合自家APP的渠道,有针对性的投放,不断完善推广策略,这样才能更加精准.有效 ...
- pgfincore外部OS缓存安装
su - root cd /opt/soft_baktar -zxvf pgfincore-1.0.gz cd pgfincore-b2b53deexport PATH=/opt/pgsql963/b ...
- Web 加入favicon
一.点击 制作自己的favicon图标; 二.在网页head中加入: <link rel="shortcut icon" href="favicon.ico& ...
- [软件工程基础]Alpha 软件测试报告
PhyLab Alpha 测试报告 测试中发现的bug Alpha版本限制与问题 由于接手时数据库已经丢失,这一版本主要修复了大部分数据库,使得网站得以运行. 相比接手时网站的状况,有以下改进: 恢复 ...
- Codeforces Round #566 (Div. 2) A. Filling Shapes
链接: https://codeforces.com/contest/1182/problem/A 题意: You have a given integer n. Find the number of ...
- [HNOI2010] 弾飞绵羊
题目链接: 传送门 题目分析: 题外话: 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出: 根号算法牛逼!!! 显然,这是一道LCT裸题,然而在下并不会LCT于是采用了分块瞎搞 对于每个点 ...