zoukankan      html  css  js  c++  java
  • CCNUOJ 1027 教你前缀

    1027: 教你前缀

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 29  Solved: 6
    [Submit][Status][Web Board]

    Description

    什么是前缀你懂吧,不懂?那我告诉你,假如串S1S2长度分别是len1len2len1<=len2S2的前len1个字母和S1一样,则S1S2的前缀。CJR不是在给叶老师做项目嘛,今天遇到一个小问题,找到wuyuwuyu也不会做,那就请教你来了。叶老师给他很多全是英文小写字母字符串,要她统计一下这里面有多少个串可以做其他串的前缀,重复的串只统计一次。

    Input

    正整数n,(n<=40000),然后输入n个字符串,每个字符串长度不超过10个字符。

    Output

    一行,表示这些串里面能做其他串前缀的串的个数。

    Sample Input

    6 ababa aba bab ab b ab 2 abc abc

    Sample Output

    3 1

    思路:节点除了一般内容外,存储这个节点是否有子节点,也就是当给它增加子节点时修改该节点布尔值;另外存储以该节点为终点的单词数量。最后扫描所有节点,统计其有子节点并且以该节点为终点的单词书不为0,或者该节点为2个以上单词的终点节点个数即可。

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int cnt;
    struct node
    {
        char x;
        int c[26],n;
        bool s;
        void nod1(){memset(c,-1,sizeof(c));n=0;s=false;}
    }t[130000];
     
    void insert(char s[12])
    {
        int now=s[0]-'a',len=strlen(s),i;
        for(i=1;i<len;i++)
        {
            if(t[now].c[s[i]-'a']==-1)
            {
                t[cnt].nod1();
                t[cnt].x=s[i];
                t[now].c[s[i]-'a']=cnt;
                t[now].s=true;
                now=cnt++;
            }
            else
            {
                now=t[now].c[s[i]-'a'];
            }
        }
        t[now].n++;
    }
     
    int main()
    {
        char ipt[12];
        int n,len,i,j,ans;
        while(scanf("%d",&n)==1)
        {
            for(i=0;i<26;i++)
                t[i].nod1();
            cnt=26;ans=0;
            for(j=0;j<n;j++)
            {
                scanf("%s",ipt);
                insert(ipt);
            }
            for(i=0;i<cnt;i++)
                if((t[i].s&&t[i].n)||t[i].n>1) ans++;
            printf("%d\n",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    在购物过程中的购买用请求重定向不用转发的原因
    自己在WEB学习过程中遇到的问题
    WEB应用中普通java代码如何读取资源文件
    [课堂总结]C++课堂总结(二)
    [一些问题] ubuntu 18.04下 配置qt opencv的坑
    [学习笔记] Ubuntu下编译C++ OpenCV程序并运行
    [学习笔记] cv2.Canny 边缘检测
    [C++讨论课] 课堂记录(一)
    [R] 简单笔记(一)
    Appium入门示例(Java)
  • 原文地址:https://www.cnblogs.com/laputa/p/2121606.html
Copyright © 2011-2022 走看看