百科问答小站 logo
百科问答小站 font logo



为什么leetcode等OJ上Cpp的提交都以class solution而不是main函数作为入口? 第1页

  

user avatar   jasison27 网友的相关建议: 
      

优点1:可以真正地比较算法的效率,

传统的一些OJ,一道题会要求你读入数据,运行算法再输出结果,运行时间包括了“读入数据”和“输出结果”。

相信很多在OJ上刷题的筒子们多少碰到过这样的事情,(1)cin太慢了,加一句std::ios::sync_with_stdio(false); (2)scanf还是太慢了,自己写一个input函数。

LeetCode和TopCoder这样的OJ要求你写一个类的接口,在评测的时候可以有效避免计算I/O的时间。

至于为什么要写一个类包含特定接口而不是直接写一个函数,是为了避免你写的其他函数和评测系统的函数冲突。

优点2:更简单的Special Judge

如果输入的结果是整数、字符串那还好办,逐个字符比较就好了,但是是一个浮点数呢?传统的OJ一般采用Special Judge的方法,自己写一个文件读入标准Ouput的浮点数和你的结果输出的浮点数,再比较两个浮点数相差值是否在限定范围内,多解问题同理。

我们来梳理一下传统OJ的Special Judge的流程:(1)你的程序读入input.txt;(2)你的程序输出output.txt;(3)Special Judge读入output.txt;(4)Special Judge程序读入标准输出standard.txt;(5)Special Judge程序比较output.txt和standard.txt;(6)得出评测结果。

而LeetCode可以避免output.txt的I/O。

有人会说,这岂不是LeetCode每一题都要写Special Judge,差不多,但是它也可以写类似于传统OJ的逐字符比较的评测模版啊。

缺点1:在自己的电脑上运行测试样例有点麻烦。

诚然,LeetCode自己提供了运行简单样例的方法。但是,如果自己想看一下比较大的数据下自己的算法到底问题出在什么地方,显然倒腾自己的电脑更舒服。

LeetCode中,如果输入的是一组数,往往函数的参数是一个vector,自己再写一个读入转成vector难免有些难受。更甚,如果函数的参数是一个List等等,就更蛋疼了。

缺点2:提交的时候不小心就把自己的测试代码复制进去了。

自己写了个测试样例,提交的时候不小心把它包含进去了。题目里面链表已经定义了,提交的时候还有链表的定义。

这些问题挺常见的。可以通过加一个宏定义来解决,但是,不得不说,提交的时候把宏定义的注释给取消了这一步还是不可避免。相较之下,传统OJ就友善很多。




  

相关话题

  C++ 允许「我们都是人,所以我可以把你私有的眼睛借来随便玩,再还给你」,这难道是一种设计上的妥协? 
  如何看待noip吧疑似被卖? 
  如何评价《c++并发编程实战》这本书? 
  想问下日本学部面试被夸是不是假的哦? 
  c语言有哪些图形库(非c++)? 
  知乎上“还是得看第一学历”的观点是否合理? 
  毕业7年实际工作2年,现重度抑郁待业2年,面试时如何自我介绍?我还能从事什么工作? 
  面试官是怎么看出面试者不自信的? 
  想在业余时间刷leetcode,配合什么书籍/课程/视频网站一起刷leetcode的效率最高? 
  当下软件开发语言腾出不穷,作为老牌c++GUI领域top1的QT未来会怎样? 

前一个讨论
如何看待《原神》深渊难度越来越高,开服 59 级玩家圣遗物太差无法满星,为什么还要继续提高难度?
下一个讨论
一台笔记本电脑的的寿命应该是多少?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利