夜雨聆风学习资料网

ARTICLE · 1338803

上海AI Lab11月7日机考笔试题与解析

上海AI Lab11月7日机考笔试题与解析

                 

写在前面

本次给大家带来2026年11月7日上海Al Lab笔试题的2道题,本场机考题目可在咱们平台上在线刷题。

大厂笔试AI Coding练习:CodeFun2000.com/aicoder-gym

题号
题目
核心做法
1
限额窗口清零
滑动窗口
2
冷链物流货物安全运输
AI Coding

第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。

题解

解题思路

  1. 固定一个长度为  的片段,设和为 。若 ,不改写就是最优。
  2. 若 ,被清零的数  要满足 ,即 。 越小结果越大,所以取片段里不小于  的最小值;找不到说明这个片段无解。
  3. 用滑动窗口枚举所有片段,同时用有序集合维护窗口里的数,每次右移插入一个、删除一个,再查一次 lower_bound。
  4. C++ 用 multiset,Java 用 TreeMap 记次数;Python 没有自带的有序集合,用分块有序列表代替(块内用 bisect 维护有序)。
  5. 所有片段取最大值,没有合法片段时答案为 。和最大约 ,要用 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 调整特征、模型参数和救援排序策略。 重点降低预测误差,提高模型对新线路、新承运方数据的泛化能力,并优化救援命中率。 每次修改后重新运行样例,对比指标变化。第五步:提交判分

检查代码运行稳定性、输出字段、预测范围和结果可复现性。 确认无误后,点击「提交判分」,通过隐藏数据评估最终效果。

刷题练习:CodeFun2000.com

手机端刷题:塔子哥刷题宝

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料