2026天津大学预推免机试/面试(本校)
对于我这个只打算保天大本校的fw来说,花费一个月来准备这样一场机试属实无奈(不然还能去干什么呢)?
最终也是很可惜,5题做对4题,最后一题小失误葬送整题。当然,做出4题保本校应该没问题吧。。。我看除了acm佬大伙也都是3、4题。
A. 这个月有几天
题目描述
教务处要给排课模块补一个小工具:给定年份和月份,回答这个月一共有多少天。
日期按照现行的格里高利历规则处理,即:
- 1、3、5、7、8、10、12 月为 31 天;
- 4、6、9、11 月为 30 天;
- 2 月在闰年为 29 天,在平年为 28 天。
一个年份 $y$ 是闰年,当且仅当:
- $y$ 能被 4 整除但不能被 100 整除;或
- $y$ 能被 400 整除。
现在有 $T$ 组询问,请你依次回答。
输入
第一行一个整数 $T$,表示询问组数。
接下来 $T$ 行,每行两个整数 $y$ 和 $m$,表示询问 $y$ 年 $m$ 月的天数。
对于全部测试数据,保证:
$1 \le T \le 10^5$
$1 \le y \le 10^9$
$1 \le m \le 12$
输出
输出 $T$ 行,第 $i$ 行一个整数,表示第 $i$ 组询问的答案。
思路
简单的if判断即可,这题做不出来可以告别研究生生活了。
B. 奖学金评定
题目描述
学院要评定年度奖学金,需要给全部 $n$ 名候选人排出一个先后顺序。
每名候选人有 一个用户名(由小写英文字母组成,互不相同)和语文、数学、英语三科成绩。
排序规则依次为:
- 总分(三科之和)从高到低;
- 若总分相同,语文成绩从高到低;
- 若总分和语文成绩都相同,用户名的字典序从小到大。
由于用户名互不相同,上述规则可以唯一确定排名。
请输出排在最前面的 $\min(n, 5)$ 名候选人。
字典序比较:从左往右逐个字符比较,第一个不同的位置上字母较小者字典序更小;若某个串是另一个串的前缀,则较短者字典序更小。例如:apple < apply,ab < abc。
输入
第一行一个整数 $n$,表示候选人人数。
接下来 $n$ 行,每行一个字符串和三个整数:
$name_i, c_i, m_i, e_i$
分别表示第 $i$ 名候选人的用户名与语文、数学、英语成绩,之间用一个空格隔开。
对于全部测试数据,保证:
$1 \le n \le 2 \times 10^5$
$0 \le c_i, m_i, e_i \le 100$
用户名长度在 1 到 10 之间,只包含小写字母,且互不相同。
输出
输出 $\min(n, 5)$ 行,按照排名从前到后,每行输出一个字符串和一个整数:该候选人的用户名与总分,用一个空格隔开。
思路
数据在2x10^5, 显然需要nlogn,那么排序就不能用n^2的冒泡之类,很容易想到将学生定义为结构体并用sort进行排序。然后就是写sort的cmp函数了
1 | if (x.total != y.total) return x.total > y.total; |
C. 裁剪木料
题目描述
社团要做一批展板支架,仓库里有 $n$ 根木料,第 $i$ 根长 $a_i$ 厘米。
现在需要裁出至少 $k$ 根支架,并且要求所有支架的长度完全相同,都等于某个正整数 $L$ 厘米。
裁剪规则:
- 一根长 $a_i$ 的木料可以裁出 $\lfloor \frac{a_i}{L} \rfloor$ 根长为 $L$ 的支架,裁剪不产生损耗;
- 裁剩下的零碎料直接丢弃,不能把多根木料拼接起来。
为了让支架尽量结实,请你求出最大的 $L$。
如果连 $L = 1$ 都凑不出 $k$ 根支架,则输出 $0$。
输入
第一行两个整数 $n$ 和 $k$,表示木料根数与需要的支架数量。
第二行 $n$ 个整数:
$a_1, a_2, \dots, a_n$
表示每根木料的长度。
对于全部测试数据,保证:
$1 \le n \le 2 \times 10^5$
$1 \le a_i \le 10^9$
$1 \le k \le 10^{18}$
输出
一行一个整数,表示最大的 $L$;若无解则输出 $0$。
思路
在考场上做到二分答案的模板题很难忍住不笑,P2440 木材加工。当然,n^2暴力从1到max_num遍历也能骗点分咯。
D. 歌单连播
题目描述
小 Z 的歌单里按顺序排着 $n$ 首歌,第 $i$ 首歌的演唱者编号为 $a_i$(编号相同表示同一位置歌手)。
他打算从歌单中挑出连续的一段来连播,但有个要求:这一段里不能出现同一位歌手的两首歌。
请你求出他最多能连播多少首,也就是求最长的连续子段,使得段内的 $a_i$ 互不相同。
输入
第一行一个整数 $n$,表示歌曲数量。
第二行 $n$ 个整数:
$a_1, a_2, \dots, a_n$
表示每首歌的演唱者编号。
对于全部测试数据,保证:
$1 \le n \le 2 \times 10^5$
$1 \le a_i \le 10^9$
输出
一行一个整数,表示满足条件的最长连续子段的长度。
思路
开个 unordered_map 存上一次出现数字 ai 的位置,从头到尾遍历1…n即可,遇到 m.find(ai)!=m.end() 则将 max_len 置为两个重复的ai之间的距离(其实也就是从上一次ai到现在的每次 len++ 记录的长度),并将 “上一次ai”的位置置为当前ai的位置。 如此遍历到最后即可。实际上 O(n) 的复杂度就做掉了。
E. 班车优惠券
题目描述
学校的班车网络有 $n$ 个站点,编号 1 到 $n$,站点之间有 $m$ 条双向线路。
第 $j$ 条线路连接站点 $u_j$ 与 $v_j$,每乘坐一次的票价为 $w_j$ 元。
小 Z 现在在站点 1,要去站点 $n$。他手上有 $k$ 张优惠券,规则如下:
- 每乘一条线路时,他可以选择使用一张优惠券,则这一次乘坐完全免费;
- 也可以不使用优惠券,按票价 $w_j$ 付费;
- 优惠券总共只有 $k$ 张,用不完不要紧,但不能超额使用。
你可以任意选择乘车路线(允许重复经过同一个站点或同一条线路),请你求出他从站点 1 到站点 $n$ 最少需要花多少钱。
如果无论如何乘车都到不了站点 $n$,输出 -1。
输入
第一行三个整数 $n, m, k$,分别表示站点数、线路数、优惠券张数。
接下来 $m$ 行,每行三个整数:
$u_j, v_j, w_j$
表示一条连接 $u_j$ 与 $v_j$,票价为 $w_j$ 的双向线路。
对于全部测试数据,保证:
$1 \le n \le 10^5$
$0 \le m \le 2 \times 10^5$
$0 \le k \le 5$
$1 \le u_j, v_j \le n$
$u_j \ne v_j$
$1 \le w_j \le 10^5$
数据中可能存在重边(两个站点之间有多条线路),但没有自环,图不保证连通。
输出
一行一个整数,表示最少花费;若无法到达站点 $n$,输出 -1。
思路
分层Dijkstra。考场上用的dfs+记忆化,但是似乎会有环的循环问题。
面试
智算学部四个学院都在早上9:30-11:30进行机试,软件学院在下午单独进行面试,分了两组,每人10分钟( 6分钟ppt+4分钟提问 )。
面试的老师也都是上过我们课的老师,提问的氛围类似聊天(因为当时面试给我们也有椅子,所以是 坐着面对面 而不是那种站在白板前类似拷打的场面),老师提问主要聚焦于你的项目,主要验证项目是不是你做的,至于项目怎么样倒是无所谓(但是老师似乎更喜欢 有实际落地 的项目而不是”小玩具“),我当时展示有三个项目,分别问了:
“这个项目是一年前的了,放到现在的多模态agent时代,如果让你重做一遍,你会选择在什么角度下手”
“这个项目实际落地的话,你认为会出现什么问题?使用真实场景下的数据,你的模型会有什么表现”
“我看这个项目是你自己弄的小玩意(看得出来他不喜欢个人项目)哈,它这个视觉部分是怎么实现的?”
当然,其实全答出来能证明你是真做了就没什么问题咯。