日常笔记~

无聊的小笔记本

会持续更新,有意思的小东西都会放在这里

其实就是一些很小又怕自己忘记的小知识,以及一些奇怪的东西

✡二进制的三种码
正数的补码原码和反码都一样。
在八位二进制数下,第一位0表示正,1表示负。
0有正0和负0之分。
原码:就是二进制正常表示一个数,不足八位在前面补零补到八位
反码:对原码取反
补码:反码+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:
注意建新图的时候要用边的两端点所在的强连通分量,不能用端点本身。
建新图的时候用并查集维护一下点之间是否已经连接过,避免建重复的边,导致成环。


✡图的大小计算:长
位数(或者说色深)得出的是bit,除以8得出Byte(字节)


✡通过建模理解算法:如NIM游戏和SG函数

运算符小结:
!:逻辑非,!x表示如果x是0,则!x==1;若x不为0,则!x为0。
~:将二进制下的每一位都取反。
0无论左移或者右移多少位,其结果都为0。


✡kmp起始位置:pre和kmp错开一位即可。

posted @ 2021-09-14 19:59  Mint-hexagram  阅读(68)  评论(1编辑  收藏  举报