当输入大小
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参数与在线法官要求的相同。
代码中存在多个问题:
scanf()
的返回值。fgets()
的返回值。if (temp < 0 && temp > num)
始终为假,除非 num
为阴性。你应该写if (temp < 0 || temp >= num)
不清楚您所说的
WA
、MLE
、RE
或 TLE
... 是什么意思