知识总结:那些年在编程题中踩过的坑循环输入输出处理常见问题对于各种语言的一些基本知识关于输出格式关于时间复杂度分析:最后关于 "我本地能通过,交上去就是不对"

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

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

关于时间复杂度分析:

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

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

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

这个问题很蠢!通不过就是有一些问题。一个是要累积经验,分析到底可能出现的问题在哪里。另外不要使用一些奇怪的函数和行为。之前有见过有人使用了windows和linux平台那个功能的函数名都不一样的奇葩函数。

如果你使用C/C++,最好别使用VS来写算法code,这个默认是MS的,一般OJ上面编译器都不会是这个鬼。

本文来源于牛客网

作者:NotDeep

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

洛谷P1731 [NOI1999]生日蛋糕(爆搜)

设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i<M时,要求 R_i>R_{i+1}Ri​>Ri+1​ 且 H_i>H_{i+1}...

1011
来自专栏章鱼的慢慢技术路

《算法图解》第一章笔记与课后练习

3524
来自专栏Vamei实验室

纸上谈兵: 图 (graph)

图(graph)是一种比较松散的数据结构。它有一些节点(vertice),在某些节点之间,由边(edge)相连。节点的概念在树中也出现过,我们通常在节点中储存数...

21110
来自专栏数据结构与算法

42:出书最多

42:出书最多 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们...

2855
来自专栏owent

PKU POJ 1724 ROADS 解题报告

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1724

642
来自专栏潇涧技术专栏

Python Algorithms - C5 Traversal

Traversal就是遍历,主要是对图的遍历,也就是遍历图中的每个节点。对一个节点的遍历有两个阶段,首先是发现(discover),然后是访问(visit)。遍...

921
来自专栏C语言C++游戏编程

400行代码编C语言控制台界版2048游戏,编写疯子一样的C语言代码

《2048》是最近比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》(T...

1160
来自专栏灯塔大数据

每周学点大数据 | No.12数据流中的频繁元素

No.12期 数据流中的频繁元素 Mr. 王:我们再来讲一个例子,数据流中的频繁元素。我们先来说说大数据的数据流模型。 小可:数据流,是流动的数据的意思吗?和...

3197
来自专栏潇涧技术专栏

Python Algorithms - C4 Induction and Recursion and Reduction

Python算法设计篇(4) Chapter 4: Induction and Recursion and Reduction

1123
来自专栏沈唁志

PHP使用递归算法查找子集获取无限极分类等实操

递归函数是我们常用到的一类函数,最基本的特点是在函数或子过程的内部,直接或者间接地调用自己的算法,但必须在调用自身前有条件判断,否则无限调用下去,也就是所谓的死...

1933

扫码关注云+社区

领取腾讯云代金券