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
相关产品推荐
相关产品推荐

