`
阿尔萨斯
  • 浏览: 4333758 次
社区版块
存档分类
最新评论

uva 11732 - strcmp() Anyone?(字典树)

 
阅读更多

题目链接:uva 11732 - strcmp() Anyone?

题目大意:给定n个串,然后两两之间比较,问说总共要比较多少次。

解题思路:字典树,建立出字典树,然后根据字典树的性质在节点记录有多少个字符串包含该节点。因为节点的个数比较多,所以用左孩子右兄弟的方法建立字典树。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;
const int maxn = 4000005;
const int maxl = 1005;

char type[maxn];
ll ans;
int sz, val[maxn];
int son[maxn], bro[maxn];

void init () {
    sz = 1;
    ans = 0;
    son[0] = bro[0] = val[0] = 0;
}

void insert (char* s) {
    int n = strlen(s);
    int u = 0;

    for (int i = 0; i <= n; i++) {
        int v = 0;
        for (int j = son[u]; j; j = bro[j]) {
            if (type[j] == s[i]) {
                v = j;
                ans += val[j] * 2;
            } else
                ans += val[j];
        }

        if (v == 0) {
            v = sz++;
            type[v] = s[i];
            val[v] = son[v] = 0;
            bro[v] = son[u];
            son[u] = v;
        }

        u = v;
        val[u]++;
    }
}

int main () {
    int cas = 1, n;
    char word[maxl];

    while (scanf("%d", &n) == 1 && n) {
        ans = 0;
        init();
        for (int i = 0; i < n; i++) {
            scanf("%s", word);
            insert(word);
        }

        printf("Case %d: %lld\n", cas++, ans);
    }
    return 0;
}

分享到:
评论

相关推荐

    Linux运维-嵌入式物联网开发教程-strcmp函数.mp4

    Linux运维-嵌入式物联网开发教程-strcmp函数.mp4

    思维挑战15:字典序-函数strcmp().zip

    思维挑战15:字典序-函数strcmp() - 输入两个单词按字典顺序输出 ```strcmp(a, b)``` 就是比较字符串a和字 符串b在字典中的顺序。 如果字符串a和字符串b完全相同,那么返回值为0。 如果字符串a在字典中比字符...

    strcmp函数 strcmp函数 strcmp函数

    strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数strcmp函数...

    全国计算机二级C语言上机题库.pdf

    - 在结构体数组排序问题中,涉及到了`strcmp`函数,它是C语言中的字符串比较函数,用于比较两个字符串的字典顺序。题目要求根据姓名的字典序排序,因此在`if`语句中应比较字符串大小。 - 在找ASCII码最大字符的...

    Strcmp(s,t)

    在编程领域,`strcmp(s, t)` 是一个非常常见的函数,用于比较两个字符串 `s` 和 `t` 的内容。这个函数广泛存在于C语言及其派生的语言中,如C++和Objective-C。`strcmp()` 函数是C标准库中的一个组成部分,位于`...

    strcmp-07-as和distinct关键字.ev4.rar

    视频文件“strcmp-07-as和distinct关键字.ev4.mp4”可能是该课程的一个章节,深入探讨了这两个概念的使用方法和应用场景。 总结来说,strcmp函数是C/C++中的字符串比较工具,而DISTINCT是SQL中的去重关键字。掌握这...

    strcmp 函数重定义

    如果第一个字符串在字典顺序上比第二个字符串小,则返回负数;反之则返回正数。 - **自定义`strcmp`函数实现**: - 在提供的代码片段中,作者重新实现了`strcmp`函数。该实现通过逐个字符地比较两个字符串(`p1`和`...

    C 语言 strcmp 函数

    strcmp函数是C语言中的一个字符串比较函数,用于比较两个字符串是否...strcmp函数按照字典序逐个比较两个字符串中对应位置的字符,直到遇到不同的字符或者字符串的结束符(即\0)。比较时,它将使用ASCII码值进行比较。

    字符串比较 STRCMP

    请求编写一个函数int STRCMP(char *source, char *dest),实现字符串比较。如果两个字符串相等则返回0,否则返回-1; 编程要求: 1,请不要使用直接调用相关的库函数等等,应自己编写处理逻辑; 2,程序通过控制台...

    strcmp函数应用

    ### strcmp函数应用详解 在C语言中,`strcmp`函数是一种非常重要的字符串处理函数,用于比较两个字符串。本文将深入探讨`strcmp`函数的基本用法、工作原理以及一个实际的应用案例。 #### 基本用法 `strcmp`函数...

    数据结构-c语言-带main函数-串4-串比较-根据标准库函数strcmp()和定义求串比较函数的两种方法。

    本篇将探讨两种在C语言中进行串比较的方法:使用标准库函数`strcmp()`和自定义比较函数`mystrcmp()`。 1. **标准库函数`strcmp()`**: C语言的标准库`&lt;string.h&gt;`提供了`strcmp()`函数,用于比较两个字符串。`...

    C语言字符串函数strcmp的详解使用和模拟

    - 如果`str1`小于`str2`(即按字典顺序排列时`str1`应该出现在`str2`之前),`strcmp`返回一个小于0的整数。 - 如果`str1`大于`str2`,`strcmp`返回一个大于0的整数。 2. **比较规则**: - `strcmp`逐个比较两个...

    strlen、strcpy和strcmp源码

    strlen、strcpy和strcmp源码实现及分析 strlen 函数是字符串处理中最基本的函数之一,它的实现可以体现出一个程序员对字符串处理的理解和编程能力。本文将对 strlen、strcpy 和 strcmp 函数的源码进行分析和实现。 ...

    C语言strcmp函数用法

    在C语言中,`strcmp`函数是一个非常重要的字符串处理函数,它被用于比较两个字符串的相似性或差异性。这个函数定义在`&lt;string.h&gt;`头文件中,其原型如下: ```c int strcmp(const char *str1, const char *str2); ``...

    C语言中strcpy_strcmp_strlen_strcat函数原型

    根据提供的文件信息,本文将详细解释C语言中的四个字符串处理函数:`strcpy`, `strcmp`, `strlen`, 和 `strcat` 的功能与实现原理。这些函数在日常编程中极为常见,掌握它们对于深入理解C语言及其字符串操作至关重要...

    Linux内核完全剖析汇编strcmp代码

    Linux内核完全剖析汇编strcmp代码 编写中遇到问题,参考blog:http://blog.csdn.net/u012509728/article/details/50404424 在此对作者表示感谢~

    c语言strcmp 函数使用

    在C语言中,`strcmp`函数是字符串处理的重要组成部分,它位于`&lt;string.h&gt;`头文件内,专门用于比较两个字符串的内容。理解并熟练运用`strcmp`函数对于编写涉及字符串比较的C程序至关重要。下面我们将深入探讨`strcmp`...

    C语言strcmp函数用法详解.zip

    2. **字典顺序**:在比较过程中,`strcmp`遵循ASCII码的字典顺序。例如,字符'a'的ASCII值小于'b',所以"apple"与"banana"相比,`strcmp`会返回负数。 3. **返回值**:当两个字符串完全相等时,`strcmp`返回0,表示...

    strcmp-05-表结构操作的SQL语句.ev4.rar

    在这个名为"strcmp-05-表结构操作的SQL语句"的压缩包中,我们可以推测它包含了一个关于如何使用SQL进行表结构操作的视频教程。以下是关于SQL表结构操作的一些关键知识点: 1. **创建表(CREATE TABLE)**:这是SQL...

    strcmp函数详细说明

    `strcmp`函数是C/C++编程语言中标准库`&lt;cstring&gt;`(在C++中)或`&lt;string.h&gt;`(在C中)的一部分,用于执行精确的字符串比较。它的主要功能是判断两个字符串是否相等,或者它们之间的相对顺序。在进行比较时,`strcmp`...

Global site tag (gtag.js) - Google Analytics