目录
一、1001-[NOIP2007]字符串的展开
二、1003-[NOIP2010]机器翻译
三、853. 有边数限制的最短路 - AcWing题库
bellman_ford算法
四、851. spfa求最短路 - AcWing题库
spfa算法
一、1001-[NOIP2007]字符串的展开
p1, p2, p3 = map(int, input().split())
st = input()
n = len(st)
s = ''for i, c in enumerate(st):if c == '-' and 1 <= i < n - 1:a, b = st[i - 1], st[i + 1]if a >= b or not ((a.isalpha() and b.isalpha()) or (a.isdigit() and b.isdigit())):z = '-'elif p1 == 3:z = '*' * (ord(b) - ord(a) - 1) * p2else:z = ''for i in range(ord(a) + 1, ord(b)):z += chr(i) * p2if p3 == 2: z = z[::-1]z = z.upper() if p1 == 2 else z.lower()s += zelse:s += c
print(s)
二、1003-[NOIP2010]机器翻译
from collections import dequeR = lambda: map(int, input().split())
m, n = R()
nums = list(R())q = deque() # 队列
len_q = 0 # 队列长度
N = 1010
st = [False for _ in range(N)] # 标记是否放入内存ans = 0
for x in nums:if not st[x]:# 没在内存if len_q == m:# 内存超限制,移出内存a = q.popleft()st[a] = Falselen_q -= 1# 将外存单词放入内存st[x] = Trueq.append(x)len_q += 1ans += 1 # 查词次数加一
print(ans)
三、853. 有边数限制的最短路 - AcWing题库
bellman_ford算法
g = []
N = 510
dist = [float('inf') for _ in range(N)]R = lambda: map(int, input().split())
n, m, k = R()
for _ in range(m):g.append(list(R()))def bellman_ford():dist[1] = 0for i in range(k):backup = dist.copy()for j in range(m):a, b, w = g[j]dist[b] = min(dist[b], backup[a] + w)if backup == dist:# 无法再更新了breakreturn dist[n]t = bellman_ford()
print("impossible" if t > int(5e6) + 100 else t)
四、851. spfa求最短路 - AcWing题库
spfa算法
from collections import deque
# 稀疏图用邻接表
N = int(1e5) + 10
# 头节点初始化为-1、值为最大值
h = [-1] * N; e = [0] * N; ne = [0] * N; val = [0] * N; idx = 0
st = [False] * N
inf = float('inf')
dist = [inf for _ in range(N)] # 初始化成无穷大
q = deque()def add(x, y, z):global idxe[idx] = yval[idx] = zne[idx] = h[x]h[x] = idxidx += 1R = lambda: map(int, input().split())
n, m = R()
for _ in range(m):x, y, z = R()add(x, y, z)def spfa():dist[1] = 0# st[1] = Trueq.append(1)while q:t = q.popleft()st[t] = False # 标记是否在队列里面# 更新其他节点i = h[t]while i != -1:j = e[i]if dist[j] > dist[t] + val[i]:# 值变小dist[j] = dist[t] + val[i]if not st[j]:# 没在队列里,避免多次不必要更新q.append(j)st[j] = Truei = ne[i]return dist[n]
ans = spfa()
print('impossible' if ans == inf else ans)
完
感谢你看到这里!一起加油吧!