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.hstd::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)。

使用scanfcin 等任何标准方法获取输入,并使用printfcout 提供输出。不要指望argcargv 有任何有用的东西。

看看这个FAQ on Codeforces。

摘自另一位著名在线评委Codechef,同样适用于 Codeforces。

如果您使用标准输入和输出流以外的任何方法 - 例如,使用命令行参数、从文件读取、打开某种对话框或其他方式 - 您将永远不会被判断为正确。

【讨论】:

以上是关于Codeforces 测试服务器错误,无法在本地机器上重现的主要内容,如果未能解决你的问题,请参考以下文章

Oralce配置正确,报监听错误或无法识别描述中的服务

本地无法访问虚拟机搭建的网站的解决方法

从本地主机连接不到虚拟机里面的服务

本地测试网页无法加载css链接文件怎么办

newman CLI在teamcity构建中返回“错误:无法获取本地颁发者证书”

vmware workstation无法连接到虚拟机 怎么解决