zoukankan      html  css  js  c++  java
  • hdu 2072 单词数

    http://acm.hdu.edu.cn/showproblem.php?pid=2072


    这个题我是用的字典树的方法来做的,首先一个字母一个字母判断,没有则创建,有则直接进入这一层。同时到单词结束时进行判断是否以前出现过。
    AC代码:
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    int sum;       //不同单词的总数
    char s[100000];
    char st[500];
    
    struct node
    {
        int n;  //用于标记从根到这里的单词出现的次数
        node *next[26];
    };
    
    node root;
    
    void tree(char *s, int len)
    {
        int i,j,id;
        node *p,*q;
        p = &root;
        for(i = 0; i<len; i++)
        {
            id = s[i]-'a';
            if(p->next[id]==NULL) //如果为空,则创建树,否则进入
            {
                q=(node *)malloc(sizeof(node));
                q->n = 0;
                for(j = 0; j<26; j++)
                {
                    q->next[j] = NULL;
                }
                p->next[id] = q;
                p=p->next[id];
            }
            else
            {
                p = p->next[id];
            }
        }
        if(p->n==0)//如果这个单词没有出现过,则总数加一
        {
            sum++;
            p->n++;
        }
        else
        {
            p->n++;
        }
        return ;
    }
    
    int main()
    {
        int n,i,j;
        while(1)
        {
            sum = 0;
            gets(s);
            if(s[0]=='#')
            {
                break;
            }
            n = strlen(s);
            for(i = 0; i < 26; i++)  //初始化树
            {
                root.n = 1;
                root.next[i] = NULL;
            }
            j = 0;
            for(i = 0; i < n; i++)
            {
                if(s[i]==' ') //用空格隔开,取出每个单词
                {
                    tree(st,j);
                    j = 0;
                }
                else
                {
                    st[j] = s[i];
                    j++;
                }
            }
            /*if(s[n-1]!=' ')
            {
                tree(st,j);
            }*/
            tree(st,j);
            printf("%d
    ",sum);
        }
    
        return 0;
    }
    


  • 相关阅读:
    Linux 普通用户su命令切换控制
    Linux上的文件管理类命令(2)
    系统内存管理
    ssh 安全配置
    redhat系统安装部署
    Unity截屏
    Unity场景道具模型拓展自定义编辑器
    Unity优化之减少Drawcall
    Unity安卓连接profile调试
    Unity游戏数据用Json保存
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3320021.html
Copyright © 2011-2022 走看看