OI注意点(写给自己看)

赛时额外注意点:

  1. 防止 CE,MLE 和 RE。

  2. 检查变量名或函数名字母打错,检查未初始化和特殊标记的数组。

  3. OI 赛制别冒险(尤其是大赛),别把无把握的算法去试验(惨痛教训:CSP-S 2021 T1 用了不确定的三分,浪费许多时间,还少了 15pts)。

  4. 时间复杂度需算对(宁可用计算器),不能马虎。

  5. 审题不能审错。

  6. 不出现格式问题,不把调试代码留下来,要及时注释。

  7. 千万别作死写 system("pause"),否则直接爆零。

  8. 一定要写文件输入输出的两个 freopen,一定要写对文件名。

  9. 做法不能想假,一定要确认正确再敲代码。

部分初赛内容:

  1. lowbit 指二进制下从低往高看,第一个一所代表的数,如 lowbit(2)=2,lowbit(3)=1,lowbit(256)=256,lowbit(-x)=lowbit(x)。

  2. Base 64:把明文的每三位转换为四位的密文,若原串长度不为三的倍数,则在后面补1或2个等号再运算,即密文长度必为 4 的倍数。

  3. 与比或的运算级高,即先算与,再算或。

  4. 模运算结果的正负与模数无关,如:4%-3=1,-4%-3=-1,-4%3=-1.

  5. 希尔,快排,堆,选择排序不稳定。

平时注意点:

  1. 能不用 puts 就不用,避免奇怪错误。

  2. 能不用 %c 格式符就不用。

  3. 仅 memset 可以 0x3f 填充,否则不能作为最大值(0x3f 实为 256,要写最大值只能写成 0x7fffffff),

  4. 01trie 许多涉及到的变量只能用 bool。(多数时候能用 bool 就用 bool)

  5. 写字符串尽量从 1 开始存。(至少目前为止,我的字符串模板代码都是按从一开始存写的)

  6. 树链剖分除了存 dfn,还要记反序 mat 数组,建线段树时涉及到原数组的不能用 dfn,要用 mat。

  7. 可持久化线段树,01trie 等部分结点数字前要加 &。

  8. 有时候存在多组数据且数组内存较大时,不能用 memset 清空,要手动清。

  9. 若要写快读,read 需考虑负数,且不能读到不是数字的就记为负数,只有读到减号才可以。

  10. 不卡常时,尽量不用快读快写。

  11. 用 ios::sync_with_stdio(0) 后,不能用格式化输入输出。

  12. 不可直接输 rand()。

  13. 尽量不写 floor 和 ceil,防止出现精度问题。

  14. getchar 需慎用。

  15. unique 需写成这样:n2=unique(b+1,b+1+n)-b-1。(有减一)
    lower_bound/upper_bound 写成这样:int op=lower_bound(b+1,b+1+n2,a[i])-b。(无减一)

  16. 不出现 next,time,hash 等变量名或函数名。

  17. (此条不是特别重要)尽可能不用 queue,stack 等无用 STL 容器。(若是写SPFA时,还是用下吧,不想写循环队列)

  18. 一些函数操作先在主函数里写好,再去写具体内容(宁可忍受 VSCode 编译错误的波形曲线,不然的话可能会因为没执行函数而半天调不出错误,特别是 OI 赛制时如此做会酿成大祸)。

  19. 题目要求输出的字母或单词尽量不手打,而是复制题目中原有的。

  20. 写 SPFA 若不用 STL,数组至少开十倍。

  21. 取模时不应写成:ans%=mod。而应写成:ans=(ans+mod)%mod。

  22. 取模时谨防数溢出范围,应及时取模。

  23. 用位运算的时候,如果有容易爆 int 的地方,变量的范围开大还不够,左移时也要注意强制转换,如 1<<n 应写成 1ll<<n,1ull<<n 等。

  24. 一定要注意数据范围55555,遇到毒瘤出题人开 long long 还不够,要开 ull,记牢各整型的范围啊:

    • int:[231,2311]
    • long long:[263,2631]
    • unsigned long long:[0,2641]
      所以说一些出题人弄个 2^64,就连 ull 也不够,输出时要以字符串方式输出,如果中间过程要用更大,干脆高精吧
  25. 平衡树的选择:裸的平衡树替罪羊、Treap任选(不熟练),Splay只用来维护区间和LCT,其余情况容易被卡(还不会,非旋 treap 基本可替代 splay,且速度更优)55555。

26.multiset 和 multimap erase操作一次会删多个(要删单个得先 find,再用 erase 删地址)。如 multiset 有 {1,1,2,2,2,3},erase(2) 后会变成 {1,1,3}.

  1. BIT套主席树空间常数为 0.5(因为树状数组可以看作去掉所有右子结点的线段树)。
posted @   mcDinic  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示