You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C代码优化求助:毒气走廊逃生问题在线判题未通过

问题背景

结束假期的Jojo回到JLB办公室工作。该办公室仅有一条从入口到JLB房间的走廊。Jojo在房间内突然听到紧急警报,得知煤气管道泄漏导致整条走廊被毒气污染。
Jojo必须立即逃出房间自救。毒气毒性极强,Jojo离开房间后必须屏住呼吸。幸运的是,走廊中有若干连接一楼(有毒气)和二楼(无毒气)的楼梯,但每个楼梯最多只能使用一次(上楼或下楼)。Jojo在二楼时可以自由呼吸。
若Jojo优化行进路线,能否安全逃出办公室?

注意事项
  • 初始时Jojo站在第一个地块,每从一个地块走到另一个地块,剩余憋气时长减1;
  • 上下楼梯时憋气时长不会减少。
输入输出格式

输入格式

  • 有T组测试用例。每组测试用例包含整数N和K,分别代表走廊长度和Jojo的最大憋气时长。
  • 下一行是N个由'0'或'1'组成的字符:'1'表示该地块有楼梯,'0'表示该地块无楼梯。

输出格式

输出T行,格式为Case #X: ,X为测试用例编号,后续跟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;
}
遇到的问题

我的代码能通过给出的样例测试,但未通过在线判题系统。我猜测问题可能出在楼梯数量为奇数时,Jojo需从倒数第二个楼梯下楼的场景。

样例输入
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

内容的提问来源于stack exchange,提问作者Jason Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:31:30