题解 | #[NOIP2000]单词接龙#

[NOIP2000]单词接龙

http://www.nowcoder.com/questionTerminal/c022626db6184bc9bfd4bee56eda25f8

忘记局部变量的回溯了,调了1个小时~

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

int num;
char input[20][100] = {0};
int hash[20] = {0};
int max_len;

int my_strcmp(char *str1, int size1, char *str2, int size2)
{
    int left, right;
    int flag;
    int minLeftVal = (size1 == 1) ? 0 : 1;
    int i;
    
    //printf("%s, %d, %s, %d\n", str1, size1, str2, size2);
    
    for (left = size1 - 1; left >= minLeftVal; left--) {
        right = left;
        flag = 0;
        for (i = 0; (i < size2) && (right < size1); i++, right++) {
            if (str1[right] != str2[i]){
                flag = 1;
            }
        }
        
        if ((flag == 0) && (right == size1) && (i != size2)) {
            //printf("%s, %s, comm len=%d\n", str1, str2, size1 - left);
            return size1 - left;
        }
    }
    
    return 0;
}

void dfs(char *currStr, int currLen, int allLen)
{
    int comm_len;
    int currInputLen;

    for (int i = 0; i < num; i++) {
        if (hash[i] > 0) {
            currInputLen = strlen(input[i]);
            comm_len = my_strcmp(currStr, currLen, input[i], currInputLen);
            if (comm_len > 0) {
                hash[i]--;
                allLen += currInputLen - comm_len;
                //printf("%s, %s, allLen=%d, currLen=%d, commLen=%d\n", currStr, input[i], allLen, currInputLen, comm_len);
                max_len = fmax(max_len, allLen);
                dfs(input[i], strlen(input[i]), allLen);
                allLen -= currInputLen - comm_len;  // 循环内的局部变量,记得回溯
                hash[i]++;
            }
        }
    }
}

int main(void)
{   
    char start[10] = {0};
    int start_len;
    max_len = 0;
    
    scanf("%d", &num);
    
    for (int i = 0; i < num; i++) {
        hash[i] = 2;
        scanf("%s", input[i]);
    }
    
    scanf("%s", start);
    start_len = strlen(start);
    
    dfs(start, start_len, start_len);
    
    printf("%d\n", max_len);
    
    return 0;
}
全部评论

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务