百科问答小站 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++ 的智能指针不就基本解决了野指针问题了吗?为什么还要吹捧rust的内存安全? 
  面试官们,你们曾经因为哪一个鲜明特征而录取了某一个员工? 
  有哪些好用的 C++ IDE? 
  刷 LeetCode 对于国内 IT 企业面试帮助大吗? 
  为什么很多大牛在写题的时候要加一堆宏? 
  电话邀请人过来面试时 感觉对方很有兴趣过来面试。对方主动约时间,但给对方发短信面试邀请时 对方不回? 
  面试时如何考察应聘者的性格特点? 
  电话邀请人过来面试时 感觉对方很有兴趣过来面试。对方主动约时间,但给对方发短信面试邀请时 对方不回? 
  C++中除以2和右移1有什么区别? 
  为何 Boost 的 Asio 要使用 Proactor 模式实现? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利