ACM基础数学知识
1、异或
相同的数,异或结果为0,不同的数,异或结果为1.异或会用在nim博弈和一些数学中。可以找出n+1个数中,唯一一个与其他的数不同的数
异或有个性质:一个数对另一个数异或两次,数值不变。
性质应用:交换两个数
- x = x ^ y; //x = 3 ^ 4
- y = x ^ y; //y = 3 ^ 4 ^ 4 = 3
- x = x ^ y; //x = 3 ^ 4 ^ 3 = 4
2、移位运算符的使用:
就如果将一个数的前16位与一个数的后16位进行交换,最后输出结果,cout<<((x&0xffff0000)<<16|(x&0x0000ffff)>>16)<<endl;
3、~
if(~flag) 等价于 if(flag≠-1) 按位取反
4、图中统计长方形
if(mp[i][j] == '#' && mp[i-1][j] ≠ '#' && mp[i][j-1] ≠ '#') 只取一个角进行判断
5、&|运算
①.判断一个数字x二进制下第i位是不是等于1。
方法:if ( ( ( 1 << ( i - 1 ) ) & x ) > 0)
②.将一个数字x二进制下第i位更改成1。
方法:x = x | ( 1<<(i-1) )
③.把一个数字二进制下最靠右的第一个1去掉。
方法:x=x&(x-1)
6、有循环节的小数转换为分数:
0.123123123... = 123 / 999
没有循环节的部分(小数点后非循环节,可以和整数算在一起,最后整个结果,再除以放大倍数),转换成一部分,有循环节的,转换成一部分,然后加起来。
例题:SDUT 2021 Autumn Individual Contest - I - Virtual Judge (vjudge.net)
7、x & -x
当一个偶数与它的负值相与时,结果是能被这个偶数整除的最大的2的n次幂
当一个奇数与它的负值相与时结果一定是1.
8、inline函数:适用于代码体短小且调用次数多的函数
eg: inline int (int a, int b){
return a > b ? a : b;
}
9.a/b=a*b^(p-2)%p, 使用条件:b ≠ p, 当b = p时,整个式子的结果是0(因为b==p时,取模结果会是0)
10、平面图欧拉定理
定理:设G为任意的连通的平面图,则v-e+f=2,v是G的顶点数,e是G的边数,f是G的面数。
11、质因数分解定理
n的质因数分解是唯一的
12、皮克定理
皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形落在格点边界上的点数,S表示多边形的面积。
可以用相似三角形求在边界上有多少点(非常巧妙)