需要帮助优化 C 代码以逃避充满气体的走廊问题

Need help optimizing C code for escaping a gas-filled hallway problem

提问人:Jason Christian 提问时间:10/24/2023 最后编辑:GerhardJason Christian 更新时间:10/24/2023 访问量:69

问:

问题:

结束假期的乔乔回到了JLB办公室的日常活动。JLB办公室是独一无二的,因为它从入口到JLB房间只有一个走廊。在JLB房间工作的Jojo突然听到紧急警报声,听说煤气管泄漏,导致唯一的走廊被煤气污染。
乔乔必须立即离开JLB房间以拯救自己。这种气体是如此有毒,以至于乔乔在离开 JLB 房间时必须屏住呼吸。幸运的是,走廊上有几级楼梯连接一楼和二楼,没有煤气。 但是,这些楼梯中的每一个最多只能使用一次,即上二楼或下到一楼。当乔乔在二楼时,乔乔可以自由呼气和呼吸。
如果 Jojo 优化他的 步骤?

注意:一开始,乔乔站在第一个情节中,每次他从一个情节走到另一个情节时,他的呼吸都会减少。爬楼梯或下楼梯时,他的呼吸不会减少。

格式输入:
有 T 个测试用例。
每个测试用例都包含整数 N 和 K,它们表示 大厅的长度以及乔乔可以屏住呼吸多久。
在下一行中,有 N 个包含“0”或“1”的数字:

  • “1”表示地块中有楼梯,
  • “0”表示地块中没有楼梯。

格式输出:
格式为“Case #X:”的 T 行,其中 X 代表测试用例编号,如果 Jojo 可以安全脱身,则后跟“Alive”,如果不能,则为 “Dead”

我的代码:

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

int longest(char arr[], int N);

int main() {
    int n;
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        int N, k;
        scanf("%d %d", &N, &k);
        char arr[N+1];
        scanf("%s", arr);

        if (longest(arr, N) < k) {
            printf("Case #%d: Alive\n", i + 1);
        } else {
            printf("Case #%d: Dead\n", i + 1);
        }
    }

    return 0;
}

int longest(char arr[], int N) {
    int longestt = 0;
    int count = 0;
    int firstStair = -1;
    int lastStair = -1;

    for (int i = 0; i < N; i++) {
        if (arr[i] == '1') {
            if (firstStair == -1) firstStair = i;
            lastStair = i;
        }
    }

    if (firstStair != -1) longestt = firstStair;

    if (lastStair != -1 && N - lastStair - 1 > longestt) longestt = N - lastStair - 1;

    return longestt;
}

我不知道这里到底出了什么问题,但在线法官没有接受,我猜问题可能出在楼梯数量奇怪的情况下,乔乔从最后一个 - 第 1 个楼梯下来

测试用例示例:

4
9 3
001011010
10 4
0000100100
10 4
0001010000
10 4
0001001000

预期输出:

Case #1: Alive
Case #2: Dead
Case #3: Dead
Case #4: Alive

通过我的代码,我已经匹配了这些测试用例

注意:输出不需要一次性全部输出,每个测试用例可以输出一次

C 算法 优化 逻辑

评论

0赞 Jason Christian 10/24/2023
我需要@Gerhard付费才能访问该解决方案?
1赞 Eric Postpischil 10/24/2023
当没有楼梯时,代码返回零,但必须在一楼遍历的距离为 。longestN

答: 暂无答案