ACM(C/C++)需注意的细节

ACM(C/C++)需注意的细节

刚接触acm不久,于是乎平时打acm的时候,总是会遇到一些玄学“WA”,“TLE”等问题,几个小时都找不出错误所在,结果
往往大佬一指点,立马AC了(这时就有一种想打人的冲动)。这主要原因是因为acm(我)有(太)很多(菜)细节(了)
要注意,下面就罗列一些平时打acm所见到要注意的地方。(每次有(又)新(被)发(WA)现就会更新)

2019.03.03

  1. 定义局部静态数组时有大小限制,似乎在100万左右,此时最好定义全局静态数组或者动态数组(动态数组是从内存的堆中分配的空间,可以开的很大);否则你的编译器能正常编译,但一运行几秒后就会异常结束。
  2. 输出结果不同的题要求不同,有的题限制输出行末不能有多余字符,有的则没有此要求。另外,由于OJ在线评定时使用了重定向,将输入和输出分开了,故在输出时可以一个test一个输出(一般输出后要换行)。
  3. 使用C++写ACM题时,若用iostream中的cin和cout,记得要开加速(具体如何开问百度),否则很可能你写的完全正确,结果却TLE了。但要注意的是,并不是所有的OJ都支持cin,cout开加速。

2019.04.05

  1. 使用万能库<bits/stdc++.h>时要注意,国内的oj似乎很多都不支持,使用提交会CE。
  2. memset函数只能初始化数值数组,若含有string类型元素,则需手动将其初始化为空串“”。

2019.04.05

  1. 读到文件尾返回的EOF在C/C++里面的值是-1,不是0!
  2. TLE主要有三种情况,一种是算法本身复杂度过高,一种是在oj时程序一直等待输入,还有一种是程序出现死循环。所以出现TLE时主要要分析这三个方面。

2019.05.02

  1. 注意!注意!注意!当使用c++中的库函数时,一定要注意库函数的形参要求,如果时浮点数的形参就要小心了,因为浮点数运算有精度限制,当运算数很大时,就有可能产生较大误差,比如pow函数等。

2019.08.07

  1. 对于double型数据C/C++中的scanf要用%lf格式,而printf均统一用%f格式(printf内部%f格式不管数据是float还是double都转成double型输出)
  2. 在打题时判断边界条件要注意,判断边界后是否需要结束数据,不要一判断边界条件后就直接输出答案,若有数据没有接收就直接输出答案可是会WA的!
  3. 做线段树题的时候 ,记得开四倍数组,否则可能会RE,具体证明百度问度娘。

2019.08.21

  1. 使用long long需谨慎,因为long long实在太慢,对于过于毒瘤的题,可能会TLE。
  2. 代码不加上using namespace std,用到时直接std::,可以获得一定程度的加速。
  3. 数据量过大时,快读很有必要。
  4. for循环次数很大时,迭代器可以考虑用register型。
  5. 对于经常调用的子函数,加上inline可以起到一定程度的加速作用。

2019.11.07

  1. ios::sync_with_stdio(false)关闭cin、cout和scanf、printf同步后,不要混用二者,否则WA、RE、TLE到自闭。

2019.11.09

  1. Poj对cin和cout的支持不太好,经常会出现使用cin、cout就TLE、WA,换成scanf、printf就AC的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今を生きる

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值