发现这几天很多出现这种情况的:洛谷和其他 OJ 上这题有分,但是 CCF 给零分。
出现这种情况的代码都有一个共同点:开了大小为 1e9 的 bool 数组。
大小为 1e9 的 bool 数组内存接近 1G 了,当然会 MLE。那么为什么洛谷上有分呢?
各位有没有发现在洛谷上交题时,即使没有动态申请空间,但各测试点反馈的空间使用仍然不同。
这是因为洛谷的评测机是以实际使用的内存来计算空间的。因此即使空间开得很大,只要空间使用没有超限,就不会 MLE。
而 CCF 的评测机是以申请的内存来计算空间的。因此只要空间申请超限,就会 MLE。
这就是为什么有些代码在洛谷上有 90 分,而 CCF 上爆零。
事实上,日常做题时不应该只计算时间复杂度,关注空间的占用也是一个好习惯,因为你不知道评测机是怎样计算空间的。
具体地,各位可以用如下代码粗略地计算空间:
cout<<sizeof(数组名)/1024/1024;
单位:M。