OI考试需注意的

一些玄学

大量莫名其妙的WA RE元凶集中于此
主要是C++的一些“特性”导致的:P

考前必看!

 

形如int&的引用可以省常数空间!

 

左移右移如果涉及到long long一定给常数加上LL,否则直接去世 e.g:1LL<<x 

 

c++11的std多出许多全局函数,如next(),begin(),end(),你的程序不能使用这些变量名,否则直接CE爆零。但是默认的c++版本并非c++11,所以如果你使用了这些变量,编译器不会报错!在编译选项中加入-std=c++11就可以解决该问题。

 

运算整数时不要信任任何stl!特别是cmath里面的数学函数,刚刚的坑啊

比如pow()算整数时大概率误差:P

一些建议

主要是一些做题技巧和编码规范,还有一些平时可以加强练习的小玩意儿

能用结构体就用结构体,特别是队列之类的数据结构;类别相同的变量或数组名字不要太相近,最好在名字后面加上标识符(e.g:hash[]&HASH[]就不好,hash1[]&hash2[]正确)。虽然麻烦一点,但不容易把数组弄混 。

 

认真读题!样例数据的性质(如从小到大的输入)不代表所有数据的性质,多自己hack几组数据。

 

模板一定要了然于心,平时没事多打几遍。

 

看清楚题目在做,务必每个字都要看清楚!其实多花不了多少时间

 

没有很大把握的题最好在敲代码之前手动模拟道样例数据,防止题意理解错误

 

一定根据数据范围开数组,太大容易爆内存,太小可能爆掉+玄学地址错误。反之,如果发现无法解释的玄学错误,那多半也是地址的锅

 

不确定数据是否会爆int的话,最好在调完程序后统一改成long long,并注意scanf和pintf里的%d要改成%lld。但数据类型开的越小,常数也会越小。

 

对拍很管用!不管是考试还是平时做题,如果自己的程序找不出错来,用标程(暴力)和程序对拍,验证正确性。如果发现有错,那就缩小数据范围到看的过来的量级后继续对拍,在错误的数据里继续手动缩小范围,就能找到错误点。另外,图论也可以对拍!

 

动手开始敲代码前一定把思路理清,程序的每一个细节(如边界处理、dp方程)最好想清楚了在写(特别是核心代码部分),如果coding中途再去想如何实现就打断了思路,容易出bug;有必要的话建议手写个提纲,写上大致流程、公式、功能等,忘了思路就去看一眼。这种方法非常有效,防入死胡同,提高代码质量,减少调试时间

 

调试时步步为营,一次只改一个错误点,否则若干错误相互叠加,就分不清了。

 

平时练题千万不要只在脑中AC就不管了,敲代码是必要的。也许你能想出正解,但敲不敲得出来就是另一回事了

 

dp的边界条件、循环顺序、起始点设置...一定要想好再写,没把握就写记忆化搜索

 

递归一定要return!

 

spfa虽然死了,但是有负权边dij就直接是错的,所以别傻傻的觉得没有负权回路就可以用dij,该spfa时用就是了

 

INF不要开得太刁钻,比如int的INF给个999999999就差不多了,如果2^31-1一旦溢出就完了

 

考试时做题一定先易后难,第一份代码一定快准狠打出高质量,否则调试过久会大幅影响心情的!

(我这回tg day2t1一开始看错题意打错代码,全部重来的时候就有点焦躁了,打了1个半小时才开始做t2,间接导致整场考试崩盘)

 

无向图加双边!!!

 

你需要在各种类型的算法中注意各种初值设置,特别是数据结构题。比如你要求最小值,那就先给所有节点赋INF,就算是最大值也不能掉以轻心,万一有负数那还得赋-INF。有些时候你会需要用到一些不太合法的调用(比如调用0号节点),这时就一定别忘了给0号节点赋初值!

 

对线段树、Splay系列的数据结构的建议:

首先在纸上写出要维护那些量,在PushDown()、Update()里怎么维护它们

然后把所有函数名先敲好,明晰结构。

在访问/使用儿子前一定PushDown(),结束操作后想想需不需要Update(),这些容易忘记,所以建议在上一步完成后在每一个函数体内写个注释备忘。

 

将vector封装到结构体或类中,大小要压线开,不然会出现玄妙的错误(是因为开多了,resize小又resize大,就没有清零的效果了)

 

长期更新...

转载于:https://www.cnblogs.com/sun123zxy/p/oinotice.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值