- 三角函数与反三角函数
需要引入math头文件,需注意使用函数时传入的参数应当是弧度制,返回值类型为double类型
三角函数
- sin( )
- cos( )
- tan( )
反三角函数
- asin( ) = arcsin
- acos( ) = arccos
- atan( ) = arctan
- π
- pai = 3.14159265358979323846
- 用atan(1)*4来计算,得到值为3.14159265358979311600在第16位出现误差
- 用acos(-1)来计算,得到的值与atan(1)*4相同
- 角度制与弧度制的互相转化
给定角度a,其弧度制为b
b = a * (π / 180)
a = b * (180 / π)
- 对数
需要引用math头文件
- log( ),默认以e为底,即 ln
- log10( ),以10为底的对数函数,即 lg
常见的应用
- a = 10log10(a)
- aa = 10log10(a的a次方) = 10a*log10(a)
- an = 10n*log10(a)
- log(a)b = log(s)b / log(s)a (括号里的是底数)-------换底公式
- 菜勒公式
int whatday(int d,int m,int y)//月日年计算星期几 { int ans; if(m == 1 || m == 2) { m += 12; y--; } if((y < 1752)||(y == 1752 && m < 9) || (y == 1752 && m == 9 && d < 3)) ans = (d+2*m+3*(m+1)/5+y+y/4+5)%7; else ans = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return ans; }
- 枚举一个序列内所有区间和,每个元素被计算的次数
含有n个元素的序列,枚举所有区间,第i个元素被计算的次数为i*(n-i+1)
如n == 3时
有(1,1) (1,2) (1,3) (2,2) (2,3) (3,3)
- 异或
- a ⊕ a = 0
- a ⊕ b = b ⊕ a//交换律
- a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;//结合律
- d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
- a ⊕ b ⊕ a = b.
- Manacher
p[i]表示以i为中心的回文串半径,为1表示只有自己本身
一个字符串中的回文串个数等于p数组从0~len2-1所有值除以二之和
- TIPS
三个数和为a,其乘积最大值为 a3/27
两个数和为a,其乘积最大值为 a2/4
- 莫队排序
bool cmp(node a, node b) { return belong[a.l] ^ belong[b.l] ? belong[a.l] < belong[b.l] : belong[a.l] &1 ? a.r < b.r : a.r > b.r; }
- 费马二平方定理
费马二平方定理是指除了2这个特殊的素数,所有的素数都可以分两类:被4除余1的素数,如5,13,17,29,37,41;第二类则是被4除余3的素数如3,7,11,19,23,31.第一类素数都能表示为两个整数的平方和,第二类都不能。
5 = 1 * 1 + 2 * 2;
13 = 2 * 2 + 3 * 3;
17 = 1 * 1 + 4 * 4;
29 = 2 * 2 + 5 * 5;
此即费马二平方定理。
- Dilworth定理
在一个偏序集里面,最少链划分等于最长反链的长度
其对偶定理是:对于一个偏序集,其最少反链划分数等于其最长链的长度。
例如给定一个数组,让你把他划分成多个非递减子序列,其数量等于数组中最长递减子序列的长度
- 组合数学
C(n, m) = C(n, n - m)
C(n, m) = C(n - 1, m - 1) + C(n - 1, m)