请选择 进入手机版 | 继续访问电脑版

广西大学ACM-ICPC竞赛论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 658|回复: 0

OJ后台自动判题的原理

[复制链接]

73

主题

150

帖子

649

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
649
发表于 2019-11-16 16:11:23 | 显示全部楼层 |阅读模式
OJ后台自动判题的原理:
系统会准备一个1.in和一个1.out文件,其实就是普通文本文件,本文最后有个例子。
前者是输入,后者是该输入对应的正确输出结果
你提交程序后,系统会把1.in文件里面的输入重定向到你的标准输入,也就是喂给scanf或input语句
然后你的代码应该将计算结果用printf或者print语句打印出来,系统会将你的打印结果与原来就准备好的1.out文件比对,完全吻合(包括格式,如必要的空格、换行)后就提示Accepted,否则会报各种错误
另外注意,后台可能有多个.in(和对应的.out)文件,而且可能都比题目上给的样例输入要复杂,因为题目篇幅所限,样例数据通常非常简单,
但只有更多更复杂的数据才能更好地测试你程序的健壮性和准确性,出题人往往也在后台精心准备了这样的数据。
(比如边界值没考虑到,有些输入能过,有些就过不了),而且还有可能用很多很大的数据来限制你的用时,
比如很多同学做大数阶乘题(https://oj.gxu.edu.cn/problem/1346)时自己测较小的数没问题,但提交到OJ会提示超时错误TLE(Time Limited Exceed),显然出题人
用了较大的数比如999来限制你的用时,逼迫你优化算法。
因此,应该看清题目要求,比如数值的范围(比如大数阶乘写明了n<10^4,那很明显超出了整型或浮点型能存放的最大数,需要用别的办法来存放计算结果了)
和其他细节,甚至应该自己构造一些复杂数据来测试,而不是仅仅通过题面给出的简单样例数据就认为提交到OJ也能过。



.in和.out文件的例子:以gxuoj 1002题(https://oj.gxu.edu.cn/problem/1002)为例,后台的1.in文件为
0 14971638568
2 18270477699
1 10149800116
0 19906559817
1 16209018105
1 16804212234
2 19289130583
1 17982711123
0 10897630486
1 11860787674
0 15192777554
而对应的正确答案1.out的内容为:
15192777554 11860787674 19289130583
10897630486 17982711123 18270477699
19906559817 16804212234 0
14971638568 16209018105 0
0 10149800116 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|GXU-ACM

GMT+8, 2020-7-4 22:20 , Processed in 0.015782 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表