当输入尺寸较大时,我的代码将无法工作,可能的解释是什么

问题描述 投票:0回答:1

当输入大小

n
接近 200,000 时,我总是在第一个输出行中得到 WA,而不是 MLE、RE 或 TLE,但是代码在在线判断和本地计算机上使用较小的
n
大小时工作得很好输入大小为 200,000。 我的代码可能存在哪些问题?

这是代码:

#define STR_SIZE 20

int main() {
    int num;
    scanf("%d", &num);
    getchar(); //to clear the \n left in the stdin
    char **arr = (char **)calloc(num, sizeof(char *));
    for (int i = 0; i < num; i++) {
        arr[i] = calloc(STR_SIZE, sizeof(char));
        fgets(arr[i], STR_SIZE, stdin);
        arr[i][strcspn(buffer, "\r\n")] = 0; //clear trailing space
    }
    //to scan the index need to be searched and print
    int searched_index;
    while (scanf("%d", &searched_index) == 1) {
        if (temp < 0 && temp > num) {
            printf("out of bound");
        }
        printf("%s\n", arr[temp]);
    }
    // Free allocated memory later
    return 0;
}

输入示例如下

3 //how many addressed to be recorded
abcd1111 //address of index 0
abcd2222 //address of index 1
abcd3333 //address of index 2
2 1 //the index of the address to be searched

输出示例如下

abcd3333 //address of index 2
abcd2222 //address of index 1

我试图解决这个问题:我已经确保输出格式是正确的。时间和内存复杂度在要求范围内。 gcc参数与在线法官要求的相同。

c
1个回答
0
投票

代码中存在多个问题:

  • 你没有检查第一个
    scanf()
    的返回值。
  • 您不检查分配失败。
  • 您没有检查
    fgets()
    的返回值。
  • 测试
    if (temp < 0 && temp > num)
    始终为假,除非
    num
    为阴性。你应该写
    if (temp < 0 || temp >= num)

不清楚您所说的

WA
MLE
RE
TLE
...

是什么意思
© www.soinside.com 2019 - 2024. All rights reserved.