zoukankan      html  css  js  c++  java
  • HDU 1075 What Are You Talking About

    HDU_1075

        为了练习一下字典树所以做了一下这个题目。由于题目数据比较多,数组开小了会WA。

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define MAXD 500010
    char str[30], b[30], txt[3010], word[MAXD][12];
    int flag[MAXD], p[MAXD], next[MAXD][26], w, e;
    void insert(int cur, int k)
    {
    ++ e;
    flag[e] = 0;
    memset(next[e], 0, sizeof(next[e]));
    next[cur][k] = e;
    }
    void init()
    {
    int i, j, k, cur;
    w = e = 0;
    memset(next[e], 0, sizeof(next[e]));
    gets(b);
    for(;;)
    {
    gets(b);
    if(strcmp("END", b) == 0)
    break;
    sscanf(b, "%s%s", word[++ w], str);
    cur = 0;
    for(i = 0; str[i]; i ++)
    {
    k = str[i] - 'a';
    if(!next[cur][k])
    insert(cur, k);
    cur = next[cur][k];
    }
    flag[cur] = 1;
    p[cur] = w;
    }
    }
    int find()
    {
    int i, j, k, cur;
    cur = 0;
    for(i = 0; str[i]; i ++)
    {
    k = str[i] - 'a';
    if(!next[cur][k])
    return 0;
    cur = next[cur][k];
    }
    if(!flag[cur])
    return 0;
    printf("%s", word[p[cur]]);
    return 1;
    }
    void solve()
    {
    int i, j, k;
    gets(b);
    for(;;)
    {
    gets(txt);
    if(strcmp(txt, "END") == 0)
    break;
    for(i = 0; txt[i]; i ++)
    {
    if(isalpha(txt[i]))
    {
    for(j = 0; isalpha(txt[i]); j ++, i ++)
    str[j] = txt[i];
    str[j] = '\0';
    if(!find())
    printf("%s", str);
    -- i;
    }
    else
    printf("%c", txt[i]);
    }
    printf("\n");
    }
    }
    int main()
    {
    init();
    solve();
    return 0;
    }


  • 相关阅读:
    26、实例化需求:团队如何交付正确的软件
    25、华胥引
    24、老子
    23、禅与摩托车维修艺术(又名万里任禅游)
    22、中国哲学简史
    21、人类简史-从动物到上帝(赫拉利)
    20、淘宝技术这十年
    19.验收测试驱动开发
    18. Scrum敏捷软件开发
    17、胡适谈哲学与人生
  • 原文地址:https://www.cnblogs.com/staginner/p/2320626.html
Copyright © 2011-2022 走看看