算法竞赛:Online Judge 工作原理 常见报错分析 如何判断算法是否超时 知己知彼 方能骗分

一、在线评测系统运行原理及各种报错常见原因

电脑只是处理数据验证最后答案与期望答案是否相同,大部分的思考都由人来完成。

OJ一般有一组或者多组input文件与output文件,比如1.in 1.out 2.in 2.out等

OJ先运行你的程序,同时在后台开始计时,要求在1秒钟内通过一个测试点。

无法通过编译 CE,

编译时开的内存过大 MLE ,

然后开始运行,

将所有input数据加入输入流中(数据量可能很大,多则几万组)

在这种大数据下除非你的程序是完美的,否则不可能通过。

将输出的内容和output文件比对,

不完全一样的WA,

数据一样,差换行和空格时是 PE ,

若在计时器计时结束前你的程序未能和output匹配完成(已完成部分都正确)是 TLE,

输出流没有正常结束是 OLE,

运行时调用了非法地址时是 RE,

二、在正式比赛中input包括两部分

一部分是出题人这对这道题可能的算法出的边缘数据,运算量最大的数据,特殊数据,

另一部分是大数据,就是随机生成大量的合法数据,将数据通过标程给出结果。

这两部分数据结合可以以极高的准确率判定提交的程序是否正确

有关ac样例的问题

仅仅是通过了样例的程序远远不能AC,

样例只是帮助你理解题意而已,

通常样例无法检测出程序的错误。

甚至有些样例是有误导性质的,

样例不能测出程序是否超时,

不能解决特判的情况,通常是 0 1 这样的特殊数字

总结:

学生提交代码后,OJ系统会对代码进行编译,如果编译通过,那么会将各个测试点的数据作为输入,程序运行后读取数据并进行输出。系统会对程序的输出和正确答案进行比较,对输出结果进行判定。一个题目有多个测试点,会将程序运行数次。

  程序运行过程中也有可能会因为各种各样的问题而导致程序异常终止,系统会对这些问题进行判定。

三 、测试点的检测结果示例

 C++还会有个 开启O2 优化 的选项,-O2指的是编译器的优化级别(Optimization level),还会有-O1, -O2, -O3, -Os, -Ofast等。

  编译器的优化选项默认是-O0,即只进行必要的优化而不做其它的优化处理,一般是作为调试使用。

  开启-O2优化后,编译器会花费更多的时间来编译,以提高代码性能,甚至部分代码的计算结果在编译器就已经计算出来。开启优化会使得运行时间大大减少,开启和不开启的运行时间有时会有数倍的差距。(有些算法竞赛中是禁用优化O2)

  C++ 标准模板库(STL) 中的通用型模板,能解决大多数情况的问题,使用时可以大大减少代码量和测试工作量。

  STL本身性能也是很高的,手写的对应算法,性能上超过STL是很困难的。但STL如果不经过优化的话,性能会低很多,开启O2级别以上的优化后,STL性能就大大提高。 常用的STL模板一定熟练使用。

四、如何判断算法是否超时

一般评测机一秒最多可以运行 一亿次 即 10^8次。而一般编程竞赛都会将时间限制为 1000ms 即 1s。在这种情况下,C++ 代码的操作次数控制在 10e7~10e8为最佳。

1000ms意味着

O(n3)的算法,可以几百,一般题目给的数据范围为100。

O(n2)的算法,可以几千,一般不到万,经常出现的就是数据范围1000。

O(nlongn)或者O(n)的算法,最常见的数据范围就是为100000。

下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:

相关推荐
FYKJ_20104 小时前
springboot雅集社区养老管理系统04456-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
zhanghaha13144 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
信誓旦旦的程序猿5 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
FYKJ_20105 小时前
springboot羽毛球场地管理系统00626-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
雯宝5 小时前
mnt_init 函数
linux
Wx-bishekaifayuan5 小时前
django医院营收信息预测系统49414-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
Wx-bishekaifayuan5 小时前
springboot会议室预约管理系统42030-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
IT毕设梦工厂5 小时前
计算机毕业设计选题推荐:基于大数据的房地产交易数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·hadoop·python·数据分析·spark·课程设计
Wx-bishekaifayuan5 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
UIU1146 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归