OI 方法论

OI 方法论

  1. 分析问题性质
  2. 问题建模
  3. 加速求解
  4. c++语言实现

分析问题性质

二选一:2-sat

区间问题:树状数组,线段树(优化建图),前缀和,差分

最大的最小值,最小的最大值:二分答案

多个状态的值:可持久化数据结构

往往找出问题性质,是解题的突破口

性质的工具——美妙的数学

注意不等式两边同乘负数变号

注意细节

问题建模

网络流模型

动态规划

转化图论问题

加速求解

矩阵快速幂加速递推

c++语言实现

细节决定成败

c++语言

变量名:

代码结构化技巧:namespace struct class

不要把多个变量设一个名字

空间

数组要开够,空间复杂度要精确到数组,质数判断要注意范围,太大只能根号n

图论:双向边要开两倍空间

时间

大输入问题要快读,大输出要快写

数据范围

十年 O I 一场空,不开 long long 见祖宗

  • long long int 相乘加 1ll

  • 慎用格式强制转换

  • 输出 long double 使用 %Lf

运算符优先级

小心按位与,或,异或 超低的优先级搞坏程序

其他

  • ++it返回it+1;it++返回it

  • a[20]的数组只允许访问a[0~19]调用a[20]会访问无效内存

  • 函数写完要调用,我有一个同学经常线段树build不调用

  • 有返回值的函数写return

考前练习技巧

题解

抄题解不要抄错行

看题解不要只看标程,看思路

不要只看一篇题解

刷题

要审题,有些题目题意相似,但是细节不同

审题部分

取模

  • 加法 a=(a+b)%mod
  • 乘法 a=a*b%mod
  • 减法 a=(a-b+mod)%mod
  • 除法 a=a*inv[b]%mod
  • 快速幂 a=ksm(a,b,mod)

有些题目要求在线,要对应修改ans,以备下次异或。有些特判0输出也要修改答案。

多测

比如建立虚树前把上一个虚树删除

  • 链式前向星,清空tot,清空head,不需要清空edge

有些题目的编号从0开始,要变成自己习惯的输入

调试技巧

原则

调试时一定要究根问底,发现一个bug,但是还要发现更多bug

因为你会不止写出一个bug

核心模块检查优先

  • dp的转移方程式

  • 线段树,平衡树的 pushup pushdown

技巧模块次之

  • 二分的边界 lower_bound还是upper_bound

  • 双指针是空心还是实心(闭区间还是开区间)

清楚代码对象

  • 边还是点

  • 区间还是元素

相近的变量名

  • 不要n,m写错

  • 队列 h 和 t 不要写反

  • 不要ldat,rdat,dat写串

调试效率相关

对于多问先独立出来询问,看是不是多测没清空

对拍

OIer基本技能

参考资料

STO STO STO JULAO ORZ ORZ ORZ

https://www.luogu.com.cn/blog/SpreadWings/oi-xie-ti-ji-ben-fang-fa-lun#

https://www.cnblogs.com/cjyyb

https://www.luogu.com.cn/blog/command-block/

https://www.cnblogs.com/flashhu

posted @ 2024-02-08 15:45  妖灵梦  阅读(49)  评论(0)    收藏  举报