单向链表
import sys def solve(): data = list(map(int, sys.stdin.buffer.read().split())) idx = 0 n = data[idx]; idx += 1 h = data[idx]; idx += 1 nxt = {h: None} for _ in range(n - 1): a = data[idx]; idx += 1 b = data[idx]; idx += 1 nxt[a] = nxt.get(b, None) nxt[b] = a k = data[idx]; idx += 1 if k == h: h = nxt.get(h, None) else: prev, cur = None, h while cur is not None and cur != k: prev, cur = cur, nxt.get(cur, None) if cur == k and prev is not None: nxt[prev] = nxt.get(k, None) res = [] cur = h while cur is not None: res.append(cur) cur = nxt.get(cur, None) print(' '.join(map(str, res))) if __name__ == "__main__": solve()用列表模拟链表更简单
读入全部整数到 data ├── n = 节点总数 ├── h = 头节点值 ├── 循环 n-1 次:读 (a, b),在 b 后面插入 a ├── k = 要删除的值 └── 删除 k,输出剩余链表
import sys data = list(map(int, sys.stdin.buffer.read().split())) idx = 0 n = data[idx] h = data[idx+1]; idx += 2 lst = [h] for _ in range(n - 1): a, b = data[idx], data[idx+1]; idx += 2 lst.insert(lst.index(b) + 1, a) //lst.insert(pos, a):在 pos 位置插入 a,原 pos 及之后的元素后移。 k = data[idx] lst.remove(k)//删除列表中第一个值为 k 的元素 print(' '.join(map(str, lst)))deep seek给出的代码不能全部通过,这里先不放代码
采用DP + 滚动数组
solve() ├── 读入 n, k ├── 读入三角形 a(1-indexed) ├── 初始化 dp ├── 逐行 DP 转移 ├── 在合法最终列范围内取最大值 └── 输出
import sys def solve(): data = sys.stdin.buffer.read().split() idx = 0 n = int(data[idx]); idx += 1 k = int(data[idx]); idx += 1 a = [None] * (n + 1) for i in range(1, n + 1): cnt = 2 * i - 1 row = [0] + [int(data[idx + t]) for t in range(cnt)] //前面补 0,使列下标从 1 开始。row[j] 就是第 i 行第 j 列 idx += cnt a[i] = row NEG = float('-inf')//NEG = -inf:表示"不可达" dp = [NEG] * (2 * n + 2) dp[1] = a[1][1] for i in range(2, n + 1): ndp = [NEG] * (2 * n + 2)//ndp 存第 i 行的 DP 值,初始全 NEG cols = 2 * i - 1 prev_cols = 2 * (i - 1) - 1 for j in range(1, cols + 1): best = NEG # 从上一行 j-1(正下), j(左下), j-2(右下)转移 for pj in (j - 1, j, j - 2): if 1 <= pj <= prev_cols and dp[pj] != NEG: if dp[pj] > best: best = dp[pj] if best != NEG: ndp[j] = best + a[i][j] dp = ndp lo = max(1, n - k) hi = min(2 * n - 1, n + k) ans = NEG for j in range(lo, hi + 1): if dp[j] > ans: ans = dp[j] print(ans) if __name__ == "__main__": solve()