无聊的小笔记本
会持续更新,有意思的小东西都会放在这里~
其实就是一些很小又怕自己忘记的小知识,以及一些奇怪的东西
✡二进制的三种码
原码:就是二进制正常表示一个数,不足八位在前面补零补到八位
反码:对原码取反
补码:反码+1
另外一说~:补码就是负数在计算机中的二进制表示方法。
✧
✡一些位运算等的预处理:
像lowbit、log、平方等会用到多次的量,如果可以判断数据上界,
则最好写成一个数组,预处理出所有可能用到的值。
如果写成函数形式,那么每次需要使用这些值是都要调用一遍函数,
或者用如x&(-x)的式子现算一遍。增加了很多无意义的运算量,代码常数会变得较差。
每题一次预处理,超大常数远离我。与其用一些玄学的优化,不如减少运算量,更快更稳定。
✧
✡2021.9.14博客园阅读量800祭
✧
✡关于exgcd:
必须保证ax+by=c中c大于0,且若a<0,不能简单地将a取abs(a),
应写为
if(a<0) a=-a,c=-c;
✧
✡阶乘逆元的求法:
facinv[i]=facinv[i-1]*inv[i]%mod;
✧
✡在每一篇题解之前加上“题目的算法要素”有助于复习和总结哦~
✧
✡在期望问题中要记得使用double
✧
✡模块化、先概要后细化的编程习惯会让思路更清晰~
✧
✡xor:相同为0,不同为1
太久没用,做题的时吧xor和|搞反了。。。。
✧
✡位运算的优先级是真的玄学。。我觉得我需要好好学一下。
另外有位运算的地方都尽量加上括号把。。。
位运算我求你了。。别祸害我的其他运算符了行不行。。。
✧
✡tarjan缩点+拓扑dp:
注意建新图的时候要用边的两端点所在的强连通分量,不能用端点本身。
建新图的时候用并查集维护一下点之间是否已经连接过,避免建重复的边,导致成环。
✧
✡记忆化搜索的时间复杂度=状态数*枚举数
✧
✡正难则反