Codeforces 测试服务器错误,无法在本地机器上重现
Posted
技术标签:
【中文标题】Codeforces 测试服务器错误,无法在本地机器上重现【英文标题】:Codeforces test server error, not reproducible on local machine 【发布时间】:2016-10-11 00:47:57 【问题描述】:我的代码:
#include <stdlib.h>
#include <iostream>
#include <math.h>
int main(int argc, char *argv[])
long long n = atoi(argv[1]);
long long m = atoi(argv[2]);
long long a = atoi(argv[3]);
if (n == 0 || m == 0 || a == 0)
std::cout << "" << 0 << std::endl;
return 0;
long long num_tiles = ceil(n / a) * ceil(m / a);
if (num_tiles == 0) num_tiles = 1;
std::cout << "" << num_tiles << std::endl;
return 0;
这会在使用 GNU C++ 11 的 Codeforces 测试服务器上产生错误(“测试 1 上的运行时错误”)。我正在使用 g++ -std=c++11 ...
在本地编译我的代码,效果很好。对于我所有其他问题的解决方案,我也遇到了同样的错误。有什么想法吗?
【问题讨论】:
问题不在于编译(尽管你的#include
'style'自90年代以来已被弃用),你的程序不正确。对于初学者来说,不管这应该做什么,ceil(n / a)
没有意义。
@BaummitAugen 您能否建设性地详细说明您的评论
好吧,既然n/a
是一个整数,那你为什么要调用ceil
呢?此外,使用cstdlib
代替stdlib.h
、std::atoi
(给定LHS 的功能选择错误,请阅读文档)代替atoi
等等。
ceil
被调用是因为我不想要楼层划分。我已经更新了标题。
@BaummitAugen 它是如何被弃用的?
【参考方案1】:
这些行是罪魁祸首:
int main(int argc, char *argv[]) long long n = atoi(argv[1]); long long m = atoi(argv[2]); long long a = atoi(argv[3]);
在在线裁判中,您必须从标准输入 (STDIN) 获取输入并输出到标准输出 (STDOUT)。
使用scanf
或cin
等任何标准方法获取输入,并使用printf
或cout
提供输出。不要指望argc
或argv
有任何有用的东西。
看看这个FAQ on Codeforces。
摘自另一位著名在线评委Codechef,同样适用于 Codeforces。
如果您使用标准输入和输出流以外的任何方法 - 例如,使用命令行参数、从文件读取、打开某种对话框或其他方式 - 您将永远不会被判断为正确。
【讨论】:
以上是关于Codeforces 测试服务器错误,无法在本地机器上重现的主要内容,如果未能解决你的问题,请参考以下文章