• HihoCoder1366 逆序单词(字典树)


    逆序单词

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    在英文中有很多逆序的单词,比如dog和god,evil和live等等。

    现在给出一份包含N个单词的单词表,其中每个单词只出现一次,请你找出其中有多少对逆序单词。

    输入

    第1行:1个整数,N,表示单词数量。2≤N≤50,000。

    第2..N+1行:每行1个单词,只包含小写字母,每个单词长度不超过16个字母。保证每个单词只出现一次,且不会出现回文单词(即一个单词倒序还是它自己,比如eye)。

    输出

    第1行:1个整数,表示单词表中逆序单词的对数。

    样例输入
    6
    dog
    live
    hiho
    evil
    coder
    god
    样例输出
    2

    字典树秒。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1000000;
    int Next[maxn][26],ans,cnt;
    bool End[maxn];
    void insert(char c[])
    {
        int Now=0,L=strlen(c);
        for(int i=0;i<L;i++){
            if(!Next[Now][c[i]-'a']) Next[Now][c[i]-'a']=++cnt;
            Now=Next[Now][c[i]-'a'];
        }
        End[Now]=1;
    }
    void query(char c[])
    {
        int Now=0,L=strlen(c);
        for(int i=L-1;i>=0;i--){
            if(!Next[Now][c[i]-'a']) return ;
            Now=Next[Now][c[i]-'a'];
        }
        if(End[Now]) ans++;
    }
    int main()
    {
        int i,j,n;
        char c[maxn];
        scanf("%d",&n);
        for(i=1;i<=n;i++){
            scanf("%s",c);
            query(c);
            insert(c);
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    Lover
    As long as you love me....
    JavaSE(4)
    JavaSE(2)
    大数据学习之JavaSE(1)
    LeetCode
    PCA和SVD的区别与联系理解
    阿里笔试题(3.23)——走迷宫
    Java单例设计模式的实现
    Maven配置及idea下创建Maven项目详细步骤
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7860971.html
Copyright © 2020-2023  润新知