提问人:Jason Christian 提问时间:10/24/2023 最后编辑:GerhardJason Christian 更新时间:10/24/2023 访问量:69
需要帮助优化 C 代码以逃避充满气体的走廊问题
Need help optimizing C code for escaping a gas-filled hallway problem
问:
问题:
结束假期的乔乔回到了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
通过我的代码,我已经匹配了这些测试用例
注意:输出不需要一次性全部输出,每个测试用例可以输出一次
答: 暂无答案
评论
longest
N