Php 我对这个编程挑战的解决方案是错误的,因为它为10/11测试用例输出了错误的答案。这些测试用例是什么?

Php 我对这个编程挑战的解决方案是错误的,因为它为10/11测试用例输出了错误的答案。这些测试用例是什么?,php,algorithm,testing,Php,Algorithm,Testing,我正在做这个编程挑战,可以在www.interviewstreet.com上找到(这是第一个值30分的挑战) 当我提交解决方案时,返回的结果表明答案是错误的,因为它只通过了1/11个测试用例。然而,我觉得我已经测试了各种情况,不明白我做错了什么。了解这些测试用例可能是什么会很有帮助,这样我就可以测试我的程序了 以下是问题(在下面的灰色线之间): 象限查询(30分) 平面上有N个点。第i个点具有坐标(xi,yi)。执行以下查询: 1) 反射点i和j之间的所有点,包括沿X轴。此查询表示为“X i

我正在做这个编程挑战,可以在www.interviewstreet.com上找到(这是第一个值30分的挑战)

当我提交解决方案时,返回的结果表明答案是错误的,因为它只通过了1/11个测试用例。然而,我觉得我已经测试了各种情况,不明白我做错了什么。了解这些测试用例可能是什么会很有帮助,这样我就可以测试我的程序了

以下是问题(在下面的灰色线之间):


象限查询(30分)

平面上有N个点。第i个点具有坐标(xi,yi)。执行以下查询:

1) 反射点i和j之间的所有点,包括沿X轴。此查询表示为“X i j”
2) 反射点i和j之间的所有点,包括沿Y轴。此查询表示为“Y i j”
3) 计算点i和j之间的点(包括位于4个象限中的每个象限)的数量。此查询表示为“cij”

输入:
第一行包含N,即点数。随后是N行。
第四行包含一个空间分隔的席和一。 下一行包含Q查询数。接下来的Q行分别包含一个以上表单的查询。
所有索引均为1索引。

输出:
为“cij”类型的每个查询输出一行。对应的行包含4个整数;在第1、第2、第3和第4象限中,指数分别在[i..j]范围内的点数

约束条件:
1要回答“这些测试用例是什么?”请尝试以下“解决方案”:

改为:

$operation = explode(" ",trim(fgets(STDIN)));

因为由于字符串比较,否则
“9”>“41”
。你应该在任何读到一行的地方进行修复。

据我猜测,这个解决方案行不通。即使你解决了错误答案的问题,解决方案也会超时

我能够找到一种方法,在O(1)时间内返回象限计数


但无法在更短的时间内进行反射:(

我发现了一个失败的测试用例并理解了原因。我在这里发布了这个答案,以便大家都清楚

我在程序上设置了一个约束,使得j必须大于I,否则将返回一个错误。我注意到以下测试用例中有一个错误:

10
11
11
11
11
11
11
11
11
11
11
1
C210

操作C返回错误。程序基本上认为“2”大于“10”。我发现的原因如下:

使用fgets()时,将返回一个字符串。如果在该行上执行诸如explode()或substr()之类的字符串操作,则将该初始字符串中的数字再次转换为字符串。因此,这意味着10变为“10”,然后在字符串操作后变为“0”

解决这个问题的一个方法是使用sscanf()函数,基本上告诉程序需要一个数字 $operation_string=fgets(STDIN);
列表($type,$begpoint,$endpoint)=sscanf($operation_string,“%s%d%d”)

我使用sscanf()提交了新的解决方案,现在通过了3/11测试用例。由于超出了CPU时间限制,它没有检查更多的测试用例。因此,现在我必须返回并优化我的算法


返回工作!:)

您提供的问题链接返回错误。我想现在没有人能回答。如果你有一份,把它贴在你的问题上。这就是为什么我们总是建议不要依赖外部链接…好的,谢谢你指出这一点。修好了。希望这有帮助并且仍然可读。你可能想把标题缩短一点。你能把标题改成与正在解决的问题更相关的我吗。你能清理一下格式吗?更清楚吗?哪些区域需要格式化?基本上,使用累积象限计数,并在O(1)中为“C”查询返回它们。嗯,在算法方面,我想我总是可以返回并优化。但首先,我试图找出测试用例失败的原因。我所缺少的基本逻辑可能有问题,我想在超时时也会出现同样的情况(“测试用例失败”)。他们不会让法官一直等着你的回答的。说得好。由于发现了一个错误,我再次进行了测试,现在我能够通过3/11测试用例,但是CPU时间限制超过了。现在,我需要把重点放在优化上。你对我优化代码有什么建议吗?O(1)是什么意思?我不认为额外的空间是问题所在。我通过STDIN和更大的输出使用不同的变量运行了一个测试。它成功运行了。这是我在回答中告诉你的P
“2”<“10”
但是
“2”>“10”
。不,这是不同的。根据我的程序,“2”<“10”和“2”<“10”。尾随空格不是问题所在。问题是“10”正在再次转换为字符串,这会将其转换为“0”。因此,比较是在后端的“2”<“0”之间。但我认为你接近了正确的想法,并为我指出了正确的方向。所以谢谢:)
<?php
$postdata = http_build_query(
    array(
        'log' => file_get_contents('php://stdin')
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

file_get_contents('http://myserver/answer.php', false, $context);
?>
<?php
$fp = fopen('/tmp/answers.log', 'a');
fputs($fp, $_POST['log']."\n");
fclose($fp);
?>
$operation = explode(" ",fgets(STDIN));
$operation = explode(" ",trim(fgets(STDIN)));