(经验贴)那些年在编程题中踩过的坑
循环输入输出处理常见问题
1、为什么需要循环输入输出:通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。
2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.out文件,这样就变成单组测试,代码就不需要循环处理,但是平时练习的题目质量不一,这个问题都会出现。
代码里面循环处理了即使是单组测试也会完全没问题,所以为了偷懒,可以全写成循环处理。
3、还有一个坑:如果测试数据是多组的,但是恰巧你代码里面需要些标记数组,map,set等,在循环内一定记得清空,不然可能会产生前面的测试样例影响了后续数据的答案。
对于各种语言的一些基本知识
1、出题人通常会使用C/C++编写标程,数据也是由标程制造的,所以使用跟出题人一样的语言会比较稳妥
4、Java相关:Java整体效率大概比C/C++慢2倍以上,但是Java写编程题也没什么问题,主要就是处理好各种输入输出的情况。
关于输出格式
2、换行问题,对于每个样例,建议输出完全之后都换行一下。对于一些题目,可能就是不换行就导致了后面输入数据错位,那就肯定不可能过了。
关于时间复杂度分析:
通常来说一般的系统1s能跑的算法量级是不足1e8的,所以做题的时候评估算法效率很重要,直接判断你的做法能否通过,当然这是以C/C++为标准的,其他语言自己乘个时间倍数。。
举个例子,比如题目n = 1e5,那么我就可以很敏感的知道我的算法需要一个 O(n) 或者 O(nlogn)。平方复杂度直接超时!
最后关于 "我本地能通过,交上去就是不对"
这个问题很蠢!通不过就是有一些问题。一个是要累积经验,分析到底可能出现的问题在哪里。另外不要使用一些奇怪的函数和行为。之前有见过有人使用了windows和linux平台那个功能的函数名都不一样的奇葩函数,所以要使用标准的跨平台的库函数。 各个语言一般平台都会告诉你每种语言给的编译器版本,这个环境信息也是很重要的。
#笔试题目#