刚搭建完框架,后续会增添具体实例,亟待施工。。。。。。
一、思维题
1. 对于给出的公式,一般都是要化简。
如果公式里是非常用符号,那么可以根据符号的优先级,类比正常的加减乘除进行化简。
2. 对于某一区间内进行重复动作,应当寻找规律。
灵感参考:字符长度,对过程进行动态模拟
3. 规律题可先打表
二、小细节
- 先判定再赋值
- 写完题记得判定数组大小
- 判定时最好不要将不同类的条件放在一起判定
- 整型范围内的最大值0x7fffffff
- 数据量比较大时,记得用scanf读入
- 也不能无脑开long long ,容易爆内存
- 读取多组数据时,轻易中断输入可能会导致后续数据错乱(来源:猜帽子游戏)
- 栈作为形参需要写取地址符
- vector的push_back值下标从0开始
- 注意要给变量赋初始值:如果定义的是全局变量或者静态变量,未初始化的话就是0;如果是局部变量,那就是以前残留在堆栈里的随机值(也就是说定义在函数中的数组值,初值不一定为0)
- 检查除法运算中是否有值会为0:做除法运算或者取余运算时,时刻注意除数是否为0,否则容易浮点溢出。
三、灵感
写图论题时,可以把图先画出来,看看是什么图结构,然后依据结构想想可以使用什么算法。(比如说有向无环图可以使用拓扑排序计算……)
四、二分
时刻注意是否需要开long long
五、前缀和
注意下标(比如前缀和数组下标从1开始,而要计算的元素可能是从0开始的,一定要注意区分)
六、区间合并
注意合并时的边界点判定,以及对于合并区间前后需要额外判定
七、排序
对于在同等条件下保持原来顺序的数据,不可以使用快排(sort),否则会将顺序打乱。(os:快排是一种不稳定的排序)
八、线段树和树状数组
注意开scanf
九、dp
贪心贪不出来就考虑动态规划
利用历史记录,来避免重复计算
十、树
动态存储(用map取代数组存值):比如二叉树即便只有20层也已经需要2^20-1个空间存值,不用数组容易越界。
计算层数避免套用公式,与上同理,容易越界。可用位运算精确计算
所有查询分支先检查节点是否存在。
兄弟节点判断:排除相同节点的情况。