算法(六):代数
约 346 字
预计阅读 1 分钟
次阅读
代数
高精度运算
1
2
3
4
|
# 四舍五入
from decimal import Decimal, ROUND_HALF_UP
def myround(x):
return Decimal(x).quantize(Decimal('.00'), rounding=ROUND_HALF_UP)
|
回文数
进制
绝对值
统计
分段计数法
试填法
贡献法
数论
因数
组合
- 1830 使字符串有序的最少操作次数
- 3405 统计恰好有 K 个相等相邻元素的数组数目
随机化
1
2
3
4
5
6
7
8
9
10
11
12
|
# 爬山法
def climb(p,cal):
eps, step = 1e-7, 1
while step > eps:
for i,w in product(range(len(p)),[step,-step]):
p2 = [a+w*(j==i) for j,a in enumerate(p)]
if cal(p2)<cal(p):
p = p2
break
else:
step *= 0.5
return p
|
线性代数
多项式与生成函数
博弈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 博弈 拓扑反推
Q = deque(res) # res[u]:终态 u 的胜负结果
while Q:
u = Q.popleft()
if u==start: # start:初始态
return res[u]
for v in g[u]:
if v in res:
continue
if v[-1]==res[u]:
res[v] = res[u]
Q.append(v)
else:
deg[v]-=1
if deg[v]==0:
res[v] = res[u]
Q.append(v)
|