0x00基本算法


1.位运算

     & 与  //&1等同于%2

  | 或

  ~ 非

  ^ 异或 //不同为1,相同为0。也就可以叫不进位加法

  >> 右移

  << 左移

  a>>k==a/2^k

 常用操作:

  (1)   求x的第k位数字  x >> k & 1  //

  (2)   lowbit(x) ,返回x的最后一位1以及后的0,返回的数都是一个2的多少次方

   -x==~x+1二进制表示负数补码等于其原码的反码+1(取反+1)

      

int lowbit(int x)
{
    return x&(-x);
}

  

swap(x,y) ⇒⇒ x^=y^=x^=y

x%2==1 ⇒⇒ x&1

x%2==0 ⇒⇒ ~x&1

判断一个两个数是否满足 x>y

x>y ⇒⇒ y-x>>31(注:这里的 x,yx,y 都是 int 型变量,若 x,yx,y 为 long long 型变量则将 31 改为 63)

2.递归

  注意如果求解子问题失败,记得要《回溯时还原现场》。递归不难,难的是找到递推关系

  分治: 把一个问题划分成若干个规模小的子问题,对这些子问题递归求解,然后再回溯时通过它们推导出原问题的解

计算机采用“堆栈结构”实现函数调用;局部变量是用栈存的占用空间太多会暴栈,这时可用全局变量。

全局变量用堆存

 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM