ACM题——易错点(更新中)

1、内存限制——Memory limit

      32768kb==32Mb   

      int 型数组到百万级别,计算方法a[x][y]内存:x*y*4。

2、memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值

   (除非该值高字节和低字节相同)。

3、题目有多组数据输入时,尤其没有给出样例组数T的范围时,慎用memset,极易超时。不妨使用栈来保存出现过的元素,实现精准地清空数组,每次数组都用memset,非常浪费时间。

4、数组下标不能超出数组的最大范围。

5、往程序里添加语句时,应考虑上下程序的顺序,比如:本应在变量更新前的语句不能放在更新后。

6、代码越简单越好。代码越长越容易写疵,而且很有可能方法不对。

7、if(); 括号后不小心加了分号,不容易发现。

8、给定n,m,方阵的大小不一定是n*m, 有可能是(n+1) * (m+1)。

9、Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV)
BellmanFord:适用于权值有负值的图的单源最短路径,并且能够检测负圈,复杂度O(VE)
SPFA:适用于权值有负值,且没有负圈的图的单源最短路径,论文中的复杂度O(kE),k为每个节点进入Queue的次数,且k一般<=2,但此处的复杂度证明是有问题的,其实SPFA的最坏情况应该是O(VE).

Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较

10、对于变量应该在命名时对应所属性质:比如x--black  ,y--white。把x改成x_black,把y改成y_white。不容易出现x对应到white这样的错误

11、You should use printf("%%") to print a '%'.

12、强制类型转换

int n;
long long sum=n*n;
/**n*n已经超过int范围,会产生错误**/
正确做法1:long long sum=(long long)n*(long long)n;
正确做法2:long long n;

13、与概率有关的dp递推不仅可以从左格、上格、左上格获得值,同时也可以把当前格的值给予右格、下格、右下格。(例如倒香槟酒题)。

14、同名变量:主函数中的变量n会覆盖全局变量的n,导致全局变量中的n的值仍为0。

15、ceil()、floor()、round()、trunc()函数的返回类型是double。

round函数四舍五入、trunc函数舍尾。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值