OJ的IO问题(一)

一直以来刷 OJ 用的都是 leetcode,无奈几乎所有公司的在线笔试都用的牛客的系统,牛客和 leetcode 的系统有些差异,第一次做线上笔试的时候还因此吃了大亏。leetcode 的解题模式是真的不错,每道题只需要实现指定的接口就行了,不用管其他与算法无关的事情,分散注意力。比如说,leetcode 的每道题的接口几乎都长这样:

class Solution {
public:
    output_type interface_name(input_type input) {
        process();
        return output;
    }
};

实现这个接口并且提交,后台会结合相关的文件(比如 main 所在的文件)进行编译、链接、运行,返回测试用例通过情况。

对比之下,牛客网的解题模式简直是一言难尽。每一道题都要完成一个完整的程序的编写。1、头文件的包含,2、接口文件的设计与实现,3、在 main 中加载测试数据并进行测试,每一步都要自行编写。乍看之下,这种解题模式可以锻炼编程能力,其实不然。编程题注重的是数据结构与算法的实现,也就是步骤 2,步骤 1和 3 都是与算法无关的,几乎大同小异,刷个几千道题都要重复步骤 1 和 3,该浪费多少时间呐!说好的 Don't Repeat Yourself 呢!牛客网选择了这种空文件形式的解题模式,后台实现倒是省事了很多:用户提交代码后,后台只要编译这个单文件,然后将可执行程序的标准输入输出重定向到测试文件的文件流最后统计反馈结果。除了解题模式的不同,牛客的在线编辑器跟 leetcode 的相比简直被甩几条街,没有调试功能,连最简单的注释代码的功能都没有???冗余度高的解题模式、功能单一的在线编辑器等等,这是用心良苦的设计还是偷懒呢?

吐槽归吐槽,既然现在很多公司都选用牛客网的 OJ 系统做笔试,那还是得去接受它适应它。