关于 hackerrank 问题的运行时错误无缘无故?
Runtime error on hackerrank problems for no reason?
这是问题:
https://www.hackerrank.com/challenges/lisa-workbook/problem.
我的代码通过了除一个之外的所有测试用例。我收到的消息只是 运行 时间错误。即使我在我应该实现的函数的开头 return 0,我仍然会收到此错误,而在所有其他测试用例中,我会收到 Wrong Answer.
这不是发生这种情况的唯一黑客排名问题。在过去的几天里,我又遇到了 3 或 4 个关于那个总是给出运行时错误的奇怪案例的问题。最后,我不得不实施一个 Python 3 解决方案(具有相同的逻辑),该解决方案通过了所有测试用例,以解决这些问题。
我想知道这是网站上的错误还是我理解有误。这是我针对这个问题的函数实现:
int workbook(int n, int k, int arr_count, int* arr)
{
int tmp = 1, specprob = 0;
int *chstart = malloc(n * sizeof(int));
int *chend = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
chstart[i] = tmp;
tmp += arr[i] / k - 1;
if (arr[i] % k != 0) {
tmp++;
}
chend[i] = tmp;
tmp++;
if (!(arr[i] < chstart[i])) {
int qno = 0, chpage = 1, iqno = 0;
for (int j = chstart[i]; j < chend[i] + 1; j++) {
if (chpage * k <= arr[i]) {
qno += k;
} else {
qno += (k - (chpage * k - arr[i]));
}
if (j > iqno && j < qno + 1) {
specprob++;
}
iqno = qno;
chpage++;
}
}
}
return specprob;
}
它看起来像一个错误,因为当你 运行 空函数只有一个 return 0;
时,它会给出相同的 运行 时间错误。
但目前,如果您不太介意不同的语言,您可以对代码进行一些小的更改,使其针对 C++ 进行编译(不要忘记也更改语言选择):
int workbook(int n, int k, vector<int> arr)
{
int tmp = 1, specprob = 0;
int *chstart = (int*)malloc(n * sizeof(int));
int *chend = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
chstart[i] = tmp;
tmp += arr[i] / k - 1;
if (arr[i] % k != 0)
{
tmp++;
}
chend[i] = tmp;
tmp++;
if (!(arr[i] < chstart[i]))
{
int qno = 0, chpage = 1, iqno = 0;
for (int j = chstart[i]; j < chend[i] + 1; j++)
{
if (chpage * k <= arr[i])
{
qno += k;
}
else
{
qno += (k - (chpage * k - arr[i]));
}
if (j > iqno && j < qno + 1)
{
specprob++;
}
iqno = qno;
chpage++;
}
}
}
return specprob;
}
这是问题: https://www.hackerrank.com/challenges/lisa-workbook/problem.
我的代码通过了除一个之外的所有测试用例。我收到的消息只是 运行 时间错误。即使我在我应该实现的函数的开头 return 0,我仍然会收到此错误,而在所有其他测试用例中,我会收到 Wrong Answer.
这不是发生这种情况的唯一黑客排名问题。在过去的几天里,我又遇到了 3 或 4 个关于那个总是给出运行时错误的奇怪案例的问题。最后,我不得不实施一个 Python 3 解决方案(具有相同的逻辑),该解决方案通过了所有测试用例,以解决这些问题。
我想知道这是网站上的错误还是我理解有误。这是我针对这个问题的函数实现:
int workbook(int n, int k, int arr_count, int* arr)
{
int tmp = 1, specprob = 0;
int *chstart = malloc(n * sizeof(int));
int *chend = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
chstart[i] = tmp;
tmp += arr[i] / k - 1;
if (arr[i] % k != 0) {
tmp++;
}
chend[i] = tmp;
tmp++;
if (!(arr[i] < chstart[i])) {
int qno = 0, chpage = 1, iqno = 0;
for (int j = chstart[i]; j < chend[i] + 1; j++) {
if (chpage * k <= arr[i]) {
qno += k;
} else {
qno += (k - (chpage * k - arr[i]));
}
if (j > iqno && j < qno + 1) {
specprob++;
}
iqno = qno;
chpage++;
}
}
}
return specprob;
}
它看起来像一个错误,因为当你 运行 空函数只有一个 return 0;
时,它会给出相同的 运行 时间错误。
但目前,如果您不太介意不同的语言,您可以对代码进行一些小的更改,使其针对 C++ 进行编译(不要忘记也更改语言选择):
int workbook(int n, int k, vector<int> arr)
{
int tmp = 1, specprob = 0;
int *chstart = (int*)malloc(n * sizeof(int));
int *chend = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
chstart[i] = tmp;
tmp += arr[i] / k - 1;
if (arr[i] % k != 0)
{
tmp++;
}
chend[i] = tmp;
tmp++;
if (!(arr[i] < chstart[i]))
{
int qno = 0, chpage = 1, iqno = 0;
for (int j = chstart[i]; j < chend[i] + 1; j++)
{
if (chpage * k <= arr[i])
{
qno += k;
}
else
{
qno += (k - (chpage * k - arr[i]));
}
if (j > iqno && j < qno + 1)
{
specprob++;
}
iqno = qno;
chpage++;
}
}
}
return specprob;
}