正文
循环输入输出处理常见问题
1、为什么需要循环输入输出:通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。
2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.out文件,这样就变成单组测试,代码就不需要循环处理,但是平时练习的题目质量不一,这个问题都会出现。
代码里面循环处理了即使是单组测试也会完全没问题,所以为了偷懒,可以全写成循环处理。
3、还有一个坑:但是这里会发生一个问题(十分常见!!!!),如果测试数据是多组的,但是恰巧你代码里面需要些标记数组,map,set等,在循环内一定记得清空,不然可能会产生前面的测试样例影响了后续数据的答案。
对于各种语言的一些基本知识
做编程题强烈建议使用C/C++,做编程题强烈建议使用C/C++,做编程题强烈建议使用C/C++,做编程题强烈建议使用C/C++
重要的事情比三遍再多说一遍,下面说说具体理由:
1、出题人通常会使用C/C++编写标程,数据也是由标程制造的,所以使用跟出题人一样的语言会比较稳妥
2、C/C++效率比较高,通常来说一般OJ对于一道题目的时限限制会区分C/C++和其他语言,通常处理方式是假设C/C++时限是1s,其他语言就会给2倍时限,甚至更多。
--------------------------------------------我是分割线----------------------------------------------
3、关于cin cout和scanf printf。做题的时候尽量使用scanf
printf。下面告诉一个小常识,不要惊讶:cin cout比scanf printf慢20倍左右!!!!!!!
一旦遇到大数据量,光是读入就有可能跪掉。
你或许可以使用std::ios::sync_with_stdio(false);
这条语句关掉scanf和cin的同步,加快效率。但是即使这样cin还要慢5倍左右,而且一旦使用了这条语句,scanf和cin混用可能就会造成一些奇怪的错误
4、Java相关:Java整体效率大概比C/C++慢2~3倍,但是Java写编程题也没什么问题,主要就是处理好各种输入输出的情况。
5、python等等其他语言,做编程题真心不建议使用这些语言,要么效率低下,要么会有些更深的坑。
关于输出格式
格式问题经常令人抓狂,其实主要都有几个常见的坑
1、行末空格:比如我输出需要打印多个数需要使用空格分隔的时候,我们循环使用printf("%d
",x);这种会很方便,但是这样会导致行末多一个空格,后台系统会严格比对你的输出和.out文件,这样也会被判错误
2、换行问题,对于每个样例,建议输出完全之后都换行一下。对于一些题目,可能就是不换行就导致了后面输入数据错位,那就肯定不可能过了。