Trie UVA 11732 "strcmp()" Anyone?

时间:2023-02-18 18:18:20

题目传送门

题意:询问所有字符串的比较次数和(注意for循环内的比较也算)

分析:将所有字符串插入到字典树上,然后结点信息记录有几个字符串,那么每走到一个结点就能知道比较到此时需要的次数。学习到链表存结点

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N = 4e3 + 5;
const int M = 1e3 + 5;
const int NODE = N * M;
struct Trie {
int head[NODE], nex[NODE];
char ch[NODE];
int cnt[NODE];
int sz;
void clear() {
sz = 1; cnt[0] = head[0] = nex[0] = 0;
}
void insert(char *str) {
int u = 0, len = strlen (str);
cnt[0]++;
for (int i=0; i<=len; ++i) {
bool found = false;
int v;
for (v=head[u]; v; v=nex[v]) {
if (ch[v] == str[i]) {
found = true; break;
}
}
if (!found) { //插入到链表的头结点后一个
v = sz++;
cnt[v] = 0;
ch[v] = str[i];
nex[v] = head[u];
head[u] = v;
head[v] = 0;
}
u = v; cnt[u]++;
}
}
void query(int u, int dep, ll &res) {
if (!head[u]) {
res += cnt[u] * (cnt[u] - 1) * dep;
return ;
}
int sum = 0, tmp = cnt[u];
for (int v=head[u]; v; v=nex[v]) {
//sum += cnt[v] * (cnt[u] - cnt[v]);
res += cnt[v] * (tmp - cnt[v]) * (dep * 2 + 1);
tmp -= cnt[v];
}
//res += sum / 2 * (2 * dep + 1);
for (int v=head[u]; v; v=nex[v]) {
query (v, dep + 1, res);
}
}
}trie;
char word[M]; int main(void) {
int n, cas = 0;
while (scanf ("%d", &n) == 1) {
if (!n) break;
trie.clear ();
for (int i=0; i<n; ++i) {
scanf ("%s", &word);
trie.insert (word);
}
ll ans = 0;
trie.query (0, 0, ans);
printf ("Case %d: %lld\n", ++cas, ans);
} return 0;
}

  

Trie UVA 11732 "strcmp()" Anyone?的更多相关文章

  1. 左儿子右兄弟Trie UVA 11732 strcmp&lpar;&rpar; Anyone&quest;

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

  2. UVA 11732 - strcmp&lpar;&rpar; Anyone&quest;&lpar;Trie&rpar;

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

  3. UVa 11732 &quot&semi;strcmp&lpar;&rpar;&quot&semi; Anyone&quest; (左儿子右兄弟前缀树Trie)

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

  4. UVA 11732 strcmp&lpar;&rpar; Anyone&quest;(Trie的性质)

    strcmp() Anyone? strcmp() is a library function in C/C++ which compares two strings. It takes two st ...

  5. UVA - 11732 &quot&semi;strcmp&lpar;&rpar;&quot&semi; Anyone&quest;左兄弟右儿子trie

    input n 2<=n<=4000 s1 s2 ... sn 1<=len(si)<=1000 output 输出用strcmp()两两比较si,sj(i!=j)要比较的次数 ...

  6. UVA - 11732 &quot&semi;strcmp&lpar;&rpar;&quot&semi; Anyone&quest; (trie)

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

  7. uva 11732 - strcmp&lpar;&rpar; Anyone&quest; 不错的Trie题

    题解:http://blog.csdn.net/u013480600/article/details/23122503 我的代码一直TLE,,,看了人家的之后,认为1.链式前向星比較好,2.*dept ...

  8. UVA 11732 strcmp&lpar;&rpar; Anyone (Trie&plus;链表)

    先两两比较,比较次数是两者相同的最长前缀长度*2+1,比较特殊的情况是两者完全相同时候比较次数是单词长度*2+2, 两个单词'末尾\0'和'\0'比较一次,s尾部'\0'和循环内'\0'比较一次. 因 ...

  9. UVA 11732 - strcmp&lpar;&rpar; Anyone&quest; 字典树

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

随机推荐

  1. 解决:WPS for Linux提示&OpenCurlyDoubleQuote;系统缺失字体symbol、wingdings、wingdings 2、wingdings 3、webding”

    WPS for Linux提示“系统缺失字体symbol.wingdings.wingdings 2.wingdings 3.webding” 出现提示的原因是因为WPS for Linux没有自带以 ...

  2. Vue2&period;X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...

  3. 自动备份sqlexpress 数据库脚本

    Create PROCEDURE [dbo].[usp_BackupDatabase] @databaseName sysname,@backupPath nvarchar(255), @backup ...

  4. JAVA的JVM虚拟机工作原理&period;V&period;1&period;0&period;0

    注意:一下内容纯属个人理解,如有错误,欢迎批评指正. (90度弯腰)谢谢. java在JVM上的运行过程: 1,编辑好的java代码(IDE无报错,测试运行无错误): 2,java源代码通过javac ...

  5. bzoj 5016&colon; &lbrack;Snoi2017&rsqb;一个简单的询问

    Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input 第 ...

  6. HDU 5752 Sqrt Bo【枚举,大水题】

    Sqrt Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  7. Java数据库学习之分页查询

    分页查询  limit [start],[rows] 思路: pram start 从哪一行开始 关键是从哪一行开始,需要根据查询的页数来进行换算出查询具体页数是从哪一行开始 start = (pag ...

  8. 关于Python的一些看法

    我是一个学新闻传播的编程新人,对于电脑这一方面,我是真的有一些一窍不通啊~选择Python语言程序设计的原因也是因为出于Python对未来专业可能会起到帮助考虑(因为未来我的专业会涉及到一些大数据抽查 ...

  9. 大数据【三】YARN集群部署

    一 概述 YARN是一个资源管理.任务调度的框架,采用master/slave架构,主要包含三大模块:ResourceManager(RM).NodeManager(NM).ApplicationMa ...

  10. 十天精通CSS3&lpar;9&rpar;

    Keyframes介绍 Keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“{…}”,括号中就是一些不同 ...