Math
运算规则
- //:向下取zheng
- int(): 向0取整
质数
埃氏筛
比如想找到[2, right]中的所有质数
| |
204. 计数质数
p[i]表示小于等于i的质数数量。从i=2开始,p[i]==0 <=> i是质数。则从ii开始,标记i的倍数为合数(通过令p[ik]=-1来实现)。并且,p[i]被赋值为p[i-1]+1
如果遇到p[i]<0,则i为合数,p[i]=p[i-1]
2523. 范围内最接近的两个质数
组合数学
乘法原理
1922. 统计好数字的数目
注意python内置函数pow(x, y, m)用来计算x**y mod m
组合计数
2514. 统计同位异构字符串数目
用到了乘法逆元
a*pow(b,-1,m)%mod
convex hull
| |
结果判断:
result > 0:C 在 AB 的左侧(逆时针转向)result < 0:C 在 AB 的右侧(顺时针转向)result = 0:A, B, C 共线
下凸包 凸包上相邻的三个点必须形成"左拐"(逆时针转向),不能"右拐"或"走直线"
从左往右、从下往上遍历所有点。建立一个栈,假设已经加入A, B
如果det(AB,BC)>0,则ABC是一个合理的下凸包
如果det(AB,BC)<=0,则弹出B,加入C
812. 最大三角形面积
首先建立凸包,然后通过同向双指针实现
暴力解法就是直接枚举所有面积
思维
逆向思维
780. 到达终点
逆向思维,每次用大的减小的
约瑟夫环
比如有这几个人:0 1 2 3 4
k=2
0杀掉1
然后把剩下的4个人重新标号,因为是从2开始杀人,所以变成
2(0),3(1),4(2),0(3)
括号内是新编号,括号外是旧编号
如果我们事先知道,有4个人,k=2时,胜利者为0
那即可得知:有5个人,k=2时,胜利者为2
| |
最大公因数
任何非零整数 $a$ 与 $0$ 的最大公约数都是 $|a|$
| |
python可以直接用gcd函数求一个数组的最大公因数
| |
GCD 可以用来解决斜率精度问题(竖线)
149. 直线上最多的点数
为什么要用//?
因为用/的话,会出现-0.0和0.0这种情况
模
若 (A - B) % k = 0,则等价于 A % k = B % k
其它
2195. 向数组中追加 K 个整数
用求和公式