• TongJI Online Judge预赛(2): LOVE LETTER


    Love letter

    Time Limit: 1000MS  Memory Limit:10000K

     

    Description

     立哥最近收到一封情书,其字里行间那诚挚的内心独白和纯真的感情叙述令立哥感动不已。但已有4次被甩经历的立哥怎么也不明白为什么会有女孩子突然莫名其妙给自己写情书。拥有超高智商的立哥很快想到这有可能是他的那帮狐朋狗友在捉弄他,所以在按照情书的约定于某月某日晚上12点半赴上海市郊黄渡镇见面之前,立哥打算先暗中调查一下这封情书是不是他的那帮死党炮制出来的。

    他花了好大的功夫,终于把这帮人平时写给女生们的怪诗以及他们的心情日记、检讨等搜集起来,汇总成册(立哥将该册子称为“材料”)。接下来,他打算通过对作文风格的对比,来分析他收到的这封神秘情书是否出自这些人之手。不过首先,他要找一找两者(情书和材料)之间完全相同的句子,为了得到更可靠的分析结果,他要找到两者之间最长的那个公共句子。不过这可不是件易事,所以他找到正在参加ACM训练的你,希望你能写个程序,帮他找到这个最长公共句子。

    这里你只需要完成核心工作,求出最长公共句子的长度就可以了。

     

    Input

     

    1行只包含一个整数T0T10),表示一共有T组测试数据。

    从第2行到第3T+1行每三行为一组测试数据。每组测试数据的第一行包含两个整数 mn0mn100),第二行为一个长度为m的字符串,为情书的内容。第三行为一个长度为n的字符串,为材料的内容。为简化处理,两个字符串都仅包含小写英文字母

     

    Output

    T行,每行对应一组测试数据的答案(将第I组测试数据的答案输出在第I行)。

    每组测试数据的答案为一个整数:最长公共句子的长度(字符数)。

     

    Sample Input

    3

    10 24

    helloworld

    thisisalowercasesentense

    6 8

    abcdef

    ghijklmn

    9 22

    abcababab

    bababcababcababababcab

    Sample Output

     

    3

    0

    9

     

     

    【样例说明】

     

    第一组数据的最长公共句子长度为3,这是因为在helloworldthisisalowercasesentense这两个字符串中,都有一个公共的子串low,其长度为3,并且不存在长度超过3的公共字串。

    第二组数据abcdefghijklmn完全不存在相同的子串,故其最长公共句子长度为0

    第三组数据abcabababbababcababcababababcab都包含abcababab这个子串,其长度为9,且不存在更长的公共子串。故答案为9

    -----------------------------------------------------------------------

    参考答案:

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

    int T, prob;
    int m, n;
    char s1[110], s2[110];
    int c[110][110];
    int f[110][110];


    int lcs(int i, int j)
    {
        if (c[i][j] != prob) {
            c[i][j] = prob;
            if (i == m || j == n || s1[i] != s2[j])
                f[i][j] = 0;
            else
                f[i][j] = 1+lcs(i+1,j+1);
        }

        return f[i][j];
    }


    int main()
    {
        int i, j, k, max;

        scanf("%d", &T);
        for (prob = 1; prob <= T; prob++) {
            scanf("%d%d", &m, &n);
            scanf("%s", s1);
            scanf("%s", s2);

            max = 0;
            for (i = 0; i < m; i++)
                for (j = 0; j < n; j++) {
                    k = lcs(i,j);
                    if (k > max) max = k;
                }

            printf("%d\n", max);
        }

        return 0;
    }




  • 相关阅读:
    软考倒计时2天
    案例分析
    冒泡排序
    二分查找
    MySQL 错误 1366:1366 Incorrect integer value
    linux(centos) 添加系统环境变量
    php的opcache缓存扩展
    启动mysqld报 mysql the server quit without updating pid file
    mysql5.5 报Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
    关于git CRLF LF结尾的问题
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/411064.html
Copyright © 2020-2023  润新知