有40001 个单词每个单词长度不超过1000,每个两个单词之间都要比较求要比较次数

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];

}

如果我们按照这样的去比较会超时,采用字典树,用孩子兄弟法求

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
const int maxn = *+;
struct Trie{
int head[maxn];
int next[maxn];
char ch[maxn];
int tot[maxn];
int sz;
long long ans;
void clear(){
sz=;
head[]=next[]=tot[]=;
}
int idx(char c){ return c-'a';}
void insert(char *s){
int n= strlen(s);
int u=,v;
tot[]++;
for(int i=; i<=n; ++i){ bool found = false;
for( v = head[u]; v; v=next[v])
if(ch[v]==s[i]){ found=true; break; }
if(found==false){
v= sz++;
tot[v]=;
head[v]=;
next[v]=head[u];
head[u]=v;
ch[v]=s[i];
}
u=v;
++tot[u];
}
}
void dfs(int u,int len){
if(head[u]==){
ans+=tot[u]*(tot[u]-)*len;
}else{
int sum=;
for(int v= head[u]; v; v=next[v])
sum+=tot[v]*(tot[u]-tot[v]);
ans+= sum/*(*len+);
for(int v= head[u]; v; v=next[v])
dfs(v,len+);
} }
long long cut(){
ans=;
dfs(,);
return ans;
} }A;
char str[];
int main()
{
int n;
int cas=;
while(scanf("%d",&n)==&&n){
A.clear();
for(int i=; i<n; ++i){
scanf("%s",str);
A.insert(str);
}
printf("Case %d: %lld\n",cas++,A.cut());
}
return ;
}

uva11732 Trie转化的更多相关文章

  1. UVA11732(Trie树)

    鸣谢https://blog.csdn.net/Baoli1008/article/details/4441936,基本都是抄的代码 #pragma GCC optimize(2) #include ...

  2. 从Trie树(字典树)谈到后缀树

    转:http://blog.csdn.net/v_july_v/article/details/6897097 引言 常关注本blog的读者朋友想必看过此篇文章:从B树.B+树.B*树谈到R 树,这次 ...

  3. [算法]从Trie树(字典树)谈到后缀树

    我是好文章的搬运工,原文来自博客园,博主July_,地址:http://www.cnblogs.com/v-July-v/archive/2011/10/22/2316412.html 从Trie树( ...

  4. UVa11732 "strcmp()" Anyone?(Trie树+孩子兄弟表示法)

    我的做法是先建字典树,统计每个结点出现次数和相同字符串个数,每个结点对答案的贡献就是2*C(次数,2),然后再分别讨论相同字符串和不同字符串对答案的贡献. 另外这题主要就是Trie树的孩子兄弟表示法: ...

  5. Uva11732(trie)

    题意:给你n个字符串 用strcmp()两两比较 ,求字符比较的总次数 分析: 数据量很大我们考虑用孩子兄弟表示法来表示字典树 #include <cstdio> #include < ...

  6. UVA11732 "strcmp()" Anyone?【左儿子右兄弟Trie】

    LINK1 LINK2 题目大意 给你一些字符串,并定义了一个函数(具体见题面) 问你把任意两个字符串放到函数里面得到的值的和是多少 思路 该怎么统计答案呢? 每次考虑当前插入的串和所有已经插入过的串 ...

  7. [bzoj4567][Scoi2016]背单词-Trie+贪心+模型转化

    Brief Description 给你N个互不相同的字符串,记\(S_i\)为第i个字符串,现在要求你指定N个串的出现顺序,我们用\(V_i\)表示第i个字符串是第几个出现的,则V为1到N的一个排列 ...

  8. Trie(字典树)解析及其在编程竞赛中的典型应用举例

    摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...

  9. Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5646   Accepted: 1226 Description In an ...

随机推荐

  1. 原来javascript 自带 encodeURI 和 decodeURI文 方法了

    今天百度一下才知道js 自带 encodeURI 和 decodeURI 方法了,之前还找了其他代码来处理(笑哭了.jpg <script type="text/javascript& ...

  2. Spring装配Bean的过程

    首先说一个概念:“懒加载” 懒加载:就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. spring配置文件中be ...

  3. abs()

    abs() 用于返回一个数值的绝对值 In [1]: abs(10) Out[1]: 10 In [2]: abs(-10) Out[2]: 10 In [3]: abs(-10.9) Out[3]: ...

  4. 为什么说在js当中所有类的父类是Object类

    代码如下所示: function Parent(add,net,no,teacher) { this.add = add; this.net = net; this.no = no; this.tea ...

  5. JS 获取中英字符串字节长度

    正则匹配中文字: 这里限定中文字的范围,一般的使用是没什么问题的.如果要求十分严格的话,那么就只能使用更加严谨的代码匹配了 1:/([^\u0000-\u00FF])/g 2:/[^\x00-\xff ...

  6. Java多线程详解(三)

    1)死锁 两个线程相互等待对方释放同步监视器时会出现死锁的现象,这时所有的线程都处于阻塞状态,程序无法继续向下执行. 如下就是会出现死锁的程序. 首先flag = 1,线程d1开始执行,锁住对象o1, ...

  7. 腾讯云大数据套件Hermes-MR索引插件使用总结

    版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/121 来源:腾云阁 https://www.qclou ...

  8. <a>标签实现链接和锚点的区别

    如果是实现链接,a标签中必须有href属性,并且属性值是合法的url 如果实现锚点,a标签中必须有name属性,当点击该标签时,会跳转到id同该标签的name值相同的元素处.

  9. Excel 中如何快速统计一列中相同字符的个数(函数法)

    https://jingyan.baidu.com/article/6d704a132ea17328da51ca78.html 通过excel快速统计一列中相同字符的个数,如果很少,你可以一个一个数. ...

  10. AS3在函数内部移除监听(arguments.callee)

    scene.addEventListener(Event.ADDED_TO_STAGE, function():void { scene.removeEventListener(Event.ADDED ...