(经验贴)那些年在编程题中踩过的坑

循环输入输出处理常见问题

1、为什么需要循环输入输出:通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。

2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.out文件,这样就变成单组测试,代码就不需要循环处理,但是平时练习的题目质量不一,这个问题都会出现。

代码里面循环处理了即使是单组测试也会完全没问题,所以为了偷懒,可以全写成循环处理。

3、还有一个坑:如果测试数据是多组的,但是恰巧你代码里面需要些标记数组,map,set等,在循环内一定记得清空,不然可能会产生前面的测试样例影响了后续数据的答案。

对于各种语言的一些基本知识

1、出题人通常会使用C/C++编写标程,数据也是由标程制造的,所以使用跟出题人一样的语言会比较稳妥

2、C/C++效率比较高,通常来说一般OJ对于一道题目的时限限制会区分C/C++和其他语言,通常处理方式是假设C/C++时限是1s,其他语言就会给2倍时限,甚至更多。

3、关于cin cout和scanf printf。做题的时候尽量使用scanf printf。下面告诉一个小常识,不要惊讶:在数据量比较大的情况下cin cout比scanf printf慢挺多。一旦遇到大数据量,光是读入就有可能跪掉。你或许可以使用std::ios::sync_with_stdio(false); 这条语句关掉scanf和cin的同步,加快效率。但是即使这样cin还要慢,而且一旦使用了这条语句,scanf和cin混用可能就会造成一些奇怪的错误

4、Java相关:Java整体效率大概比C/C++慢2倍以上,但是Java写编程题也没什么问题,主要就是处理好各种输入输出的情况。

5、python等等其他语言,做编程题首先要自己在平台上多练习不同的数据格式的读取方法,还有就是效率可能偏低,另外有些语言封装的功能太丰富了,以至于代码里各种函数完成的最终代码,笔试官或者面试官对于算法的考察并不想看到这样的code。
6、开辟数组空间最好根据题目的数据范围要求来,这里可能会造成runtime error,如果代码中递归的深度太深也可能爆栈空间导致runtime error。

关于输出格式

格式问题经常令人抓狂,其实主要都有几个常见的坑
1、行末空格:比如我输出需要打印多个数需要使用空格分隔的时候,我们循环使用printf("%d ",x);这种会很方便,但是这样会导致行末多一个空格,后台系统会严格比对你的输出和.out文件,这样也会被判错误

2、换行问题,对于每个样例,建议输出完全之后都换行一下。对于一些题目,可能就是不换行就导致了后面输入数据错位,那就肯定不可能过了。

关于时间复杂度分析:

通常来说一般的系统1s能跑的算法量级是不足1e8的,所以做题的时候评估算法效率很重要,直接判断你的做法能否通过,当然这是以C/C++为标准的,其他语言自己乘个时间倍数。。

举个例子,比如题目n = 1e5,那么我就可以很敏感的知道我的算法需要一个 O(n) 或者 O(nlogn)。平方复杂度直接超时!

最后关于 "我本地能通过,交上去就是不对"

这个问题很蠢!通不过就是有一些问题。一个是要累积经验,分析到底可能出现的问题在哪里。另外不要使用一些奇怪的函数和行为。之前有见过有人使用了windows和linux平台那个功能的函数名都不一样的奇葩函数,所以要使用标准的跨平台的库函数。 各个语言一般平台都会告诉你每种语言给的编译器版本,这个环境信息也是很重要的。

#笔试题目#
全部评论
希望今晚能过
2 回复
分享
发布于 2020-03-04 18:42
不用vs用什么
点赞 回复
分享
发布于 2016-09-06 12:47
阅文集团
校招火热招聘中
官网直投
果佬牛批
点赞 回复
分享
发布于 2019-08-06 12:51
有时候输出可以过,有时候不行是什么情况,我已经被逼到除最后一个外其它都手动加一个空格还是这个样子,通不通过看脸  什么情况
点赞 回复
分享
发布于 2019-08-21 20:44
第一次使用牛客网,本地输出是正确的,但是提交就没有输出了,C++的cout和printf都试过了,请求大神相助。回帖
点赞 回复
分享
发布于 2019-10-11 11:21
顶上去,希望参加今天晚上考试的同学都看看。
3 回复
分享
发布于 2016-09-06 12:38
可是python真的好用啊,又不用担心蛋疼的指针问题,居然列为不推荐😅,哭给你看哦
2 回复
分享
发布于 2019-03-09 12:24
“还有一个坑:但是这里会发生一个问题(十分常见!!!!),如果测试数据是多组的,但是恰巧你代码里面需要些标记数组,map,set等,在循环内一定记得清空,不然可能会产生前面的测试样例影响了后续数据的答案” -------------------------------------------------------------------------------------------------------------------------------------- 想问一下这里具体如何做?比如Javascript
1 回复
分享
发布于 2019-08-01 18:11
顶!
点赞 回复
分享
发布于 2016-09-06 12:18
棒棒哒
点赞 回复
分享
发布于 2016-09-06 12:41
棒!
点赞 回复
分享
发布于 2016-09-06 13:10
希望晚上考试顺利!
点赞 回复
分享
发布于 2016-09-06 16:23
其实,用Java写虽然麻烦,但是时间、空间条件放松了,反而容易过了。
点赞 回复
分享
发布于 2016-09-06 16:30
为什么总是没有输出(啥也没打印出来)呢?明明在本地有输出的,而且时间空间也都没超过。。。有人碰到过这种情况吗??
点赞 回复
分享
发布于 2017-03-25 11:22
果果nb
点赞 回复
分享
发布于 2019-07-01 11:10
请问大佬,循环输入输出有代码帖子总结吗
点赞 回复
分享
发布于 2019-08-02 15:17
昨天参加阿里的笔试,编程题最后一分钟从本地IDE复制到网页中了,但是没有点“保存并调试”就因为时间到了自动交卷了(就差一秒真的很难受),请问这种情况还会有内容提交上去吗?
点赞 回复
分享
发布于 2020-04-28 19:01
时间复杂度推断的可以解释一下吗?通常编程题的时间要求好像都是以秒为单位的,那怎么推断时间复杂度?
点赞 回复
分享
发布于 2020-07-15 13:12

相关推荐

88 404 评论
分享
牛客网
牛客企业服务