回 帖 发 新 帖 刷新版面

主题:求助高手们呀

百度语言翻译机


百度语言翻译机 

时限 1s 

百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。 

为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。 

输入数据: 

输入数据包含三部分 

1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。 

2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) . 

3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符) 

输出数据: 

输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样) 

#include <stdio.h>
#include <string.h>

struct DATA{
    char sl[11];
    char rc[256];
};

struct DATA Data[10000];
int N;
char word[1000000], nword[1000000000];

int compare(char *word, char *sl)
{
    int i = 0;
    while(1)
    {
        if(sl[i] != word[i]) return 0;
        ++i;
        if(sl[i] == 0) return i;
        if(word[i] == 0) return 0;
    }
}

int find(int i)
{
    int j, l = 0, r, f;
    for(j = 0; j != N; ++j)
    {
        r = compare(word + i, Data[j].sl);
        if(r > l)
        {
            l = r;
            f = j;
        }
    }
    if(l == 0) return -1;
    else return f;
}

void main()
{
    int i, j, r, l;
    scanf("%d", &N);
    for(i = 0; i != N; ++i)
    {
        scanf("%s %s", Data[i].sl, Data[i].rc);
    }
    fflush(stdin);
    gets(word);
    i = 0;
    j = 0;
    while(word[i] != 0)
    {
        r = find(i);
        if(r == -1)
        {
            nword[j] = word[i];
            ++j;
            ++i;
        }
        else
        {
            strcpy(nword + j, Data[r].rc);
            j += strlen(Data[r].rc);
            i += strlen(Data[r].sl);
        }
    }
    nword[j] = 0;
    puts(nword);
}
谁可以帮我解答一下:
    问题分析:通过对该问题的分析得出需要设计的算法以及必须设计的变量。
    程序模块设计:写出设计该程序所必须的程序模块以及每个模块所须完成的功能,输入输出参数以 及每个参数的含义。
    程序流程设计:绘出每个模块的程序流程。
[em1]

回复列表 (共1个回复)

沙发

既然是一道ACM训练题,至少给出输入和输出示例啊。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册