ARTICLE · 1338803
上海AI Lab11月7日机考笔试题与解析
写在前面
本次给大家带来2026年11月7日上海Al Lab笔试题的2道题,本场机考题目可在咱们平台上在线刷题。
大厂笔试AI Coding练习:CodeFun2000.com/aicoder-gym
第1题-限额窗口清零
题目内容
某监控系统会对一串读数做定长片段抽检:每次必须截取恰好 个相邻读数作为一个片段来评估。现给出长度为 的非负整数序列 、一个阈值 以及片段长度 。
选好一个长度恰为 的连续片段后,允许把片段里最多一个读数改写成 ,也可以一个都不改。把处理后片段内所有读数相加得到 ,要求 。请在所有满足要求的片段与改写方式中,求出 能取到的最大值;如果任何片段无论怎样处理都无法满足 ,输出 。
输入描述
本题有多组测试数据。
第一行是一个整数 ,表示测试数据的组数。
每组数据占两行:
第一行三个整数 ,依次表示序列长度、阈值和片段长度; 第二行 个整数 ,表示序列中的读数。
输出描述
每组数据输出一行一个整数,表示满足 时 的最大值;不存在合法方案时输出 。
数据范围:
; ; ; ; 同一个测试文件中所有 之和不超过 。
样例1
输入
35 9 23 6 2 7 46 9 35 1 6 3 3 83 1 24 6 5输出
990说明
第 1 组:片段 [3,6] 的和恰好为 9,不用改写即可,答案 9。
第 2 组:片段 [1,6,3] 的和为 10,超出阈值 1,把其中的 1 改成 0 后和为 9。若只想着把最大值 6 清零,只能得到 4;其他片段也凑不出比 9 更大的合法和,所以答案为 9。
第 3 组:每个片段改写任意一个读数后,剩下的那个读数至少是 4,都超过阈值 1,不存在合法方案,输出 0。
题解
解题思路
固定一个长度为 的片段,设和为 。若 ,不改写就是最优。 若 ,被清零的数 要满足 ,即 。 越小结果越大,所以取片段里不小于 的最小值;找不到说明这个片段无解。 用滑动窗口枚举所有片段,同时用有序集合维护窗口里的数,每次右移插入一个、删除一个,再查一次 lower_bound。 C++ 用 multiset,Java 用TreeMap记次数;Python 没有自带的有序集合,用分块有序列表代替(块内用bisect维护有序)。所有片段取最大值,没有合法片段时答案为 。和最大约 ,要用 64 位整数。
复杂度分析
时间复杂度:(Python 分块版为 ),每个数插入、删除各一次,每个窗口查询一次。 空间复杂度:。
代码实现
python代码(C++和JAVA代码见平台)
import sysfrom bisect import bisect_left, insortdefsolve(n, L, w, b): B = max(64, int((32 * w) ** 0.5)) # 块大小约 sqrt(32w),块数约 sqrt(w/32) a = sorted(b[:w]) bk = [a[i:i + B] for i in range(0, w, B)] # 分块有序表:块内有序,块间有序 s = sum(a) ans = 0for r in range(w - 1, n):if r >= w:# 加入 b[r]:放进第一个末尾 >= b[r] 的块 x = b[r] i = 0while i < len(bk) - 1and bk[i][-1] < x: i += 1 insort(bk[i], x)if len(bk[i]) > 2 * B: # 块太大就拆开 bk[i:i + 1] = [bk[i][:B], bk[i][B:]]# 移出 b[r-w] x = b[r - w] i = 0while bk[i][-1] < x: i += 1 bk[i].pop(bisect_left(bk[i], x))ifnot bk[i]:del bk[i] s += b[r] - b[r - w]if s <= L: ans = max(ans, s)continue# 要清零的数 v 需满足 v >= s-L,取最小的那个 x = s - Lfor k in bk:if k[-1] >= x: ans = max(ans, s - k[bisect_left(k, x)])breakreturn ansdefmain(): data = sys.stdin.buffer.read().split() t, p = int(data[0]), 1 out = []for _ in range(t): n, L, w = int(data[p]), int(data[p + 1]), int(data[p + 2]) b = list(map(int, data[p + 3:p + 3 + n])) p += 3 + n out.append(solve(n, L, w, b)) print("\n".join(map(str, out)))if __name__ == "__main__": main()第2题-冷链物流货物安全运输
题目介绍
题目要求根据冷链运输过程中的实时数据,预测货物距离突破安全运输条件还剩多少分钟,并计算对应的救援优先级。 输入数据包括箱内温度、环境温度、制冷机组负载、累计温度暴露量、剩余里程、ETA 等字段。 需要输出两个预测结果:
safe_window_minutes:剩余安全运输时间。rescue_priority:救援优先级,取值范围为 0~1。
平台主要从窗口预测误差、新线路预测误差、救援命中效果三个方面进行评分。
做题步骤
第一步:分析题目和数据
将题目要求和 SCHEMA.md 字段说明提供给 AI,让 AI 理解业务逻辑、输入输出格式及评分标准。 使用 Python 分析训练集,查看字段分布、缺失值、异常值以及特征与预测目标之间的关系。
第二步:选择模型并编写代码
让 AI 根据数据特点选择合适的机器学习模型,例如随机森林、梯度提升树等。 结合温度变化、累计暴露量、剩余运输时间等字段构造特征,训练模型预测剩余安全窗口。 同时根据越界风险和货物价值计算救援优先级。
第三步:运行样例
让 AI 将完整预测逻辑写入 main.py,按照平台规定的命令行格式读取 CSV 并生成预测文件。 点击「运行样例」,检查代码是否正常运行、输出格式是否符合要求,并查看验证集指标。
第四步:优化模型
根据验证结果继续让 AI 调整特征、模型参数和救援排序策略。 重点降低预测误差,提高模型对新线路、新承运方数据的泛化能力,并优化救援命中率。 每次修改后重新运行样例,对比指标变化。第五步:提交判分
检查代码运行稳定性、输出字段、预测范围和结果可复现性。 确认无误后,点击「提交判分」,通过隐藏数据评估最终效果。
手机端刷题:塔子哥刷题宝
















































































