【笔试刷题】团子-2026.04.18-研发岗-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🤖 内容包含AI辅助生成,题解和代码均经过多轮验证,有问题欢迎评论

🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

团子-2026.04.18-研发岗

1. 小兰的批量清洗保留表

问题描述

小兰在整理一张长度为 的记录表,表中的第 项权值为

他会连续进行 轮清洗。每一轮都执行下面的规则:

  • 删除当前表中权值最小的一项;
  • 如果最小值出现了多次,就删掉其中位置最靠前的那一项。

清洗结束后,剩余记录的相对顺序保持不变。请输出最后留下来的序列。

输入格式

每个测试文件包含多组数据。

第一行输入一个整数 ,表示测试数据组数。

对于每组数据:

  • 第一行输入两个整数
  • 第二行输入 个整数

输出格式

对于每组数据,输出一行,表示完成 轮清洗后的序列。

剩余元素之间用一个空格分隔。

样例输入

3
5 2
3 1 4 1 5
3 0
1 2 3
5 4
5 4 3 2 1

样例输出

3 4 5
1 2 3
5

样例说明

  • 第一组里,两个最小值都是 ,要先删位置更靠前的那个,再删另一个 ,最后剩下 3 4 5
  • 第二组不需要清洗,原序列直接保留。
  • 第三组删掉前四轮最小值后,只剩下最大的 5

数据范围

  • 单个测试文件中所有 的总和不超过

题解

每一轮删掉的其实就是当前还没被删掉的最小二元组

这里的真正要抓的是:

  • 比较优先级先看值
  • 值相同的时候再看下标 ,下标小的会更早被删。

所以完全没必要真的删 次。把所有位置写成二元组 后整体排一次序,排在最前面的 个位置,就是最终会被删掉的那 项。

拿到这 个下标以后,再按原顺序扫一遍数组,把没被标记的位置输出出来即可。

复杂度分析

  • 排序复杂度是
  • 标记和输出都是线性复杂度。
  • 因此单组总复杂度为 ,可以通过数据范围。

参考代码(Python)

import sys

def input() -> str:
    return sys.stdin.readline().strip()

def solve() -> None:
    t = int(input())
    out = []

    for _ in range(t):
        n, m = map(int, input().split())
        arr = list(map(int, input().split()))

        # 把每个元素写成 (值, 原下标)。
        # 排序后最前面的 m 个位置,就是最终会被清洗掉的记录。
        ords = [(arr[i], i) for i in range(n)]
        ords.sort()

        removed = [False] * n
        for k in range(m):
            removed[ords[k][1]] = True

        # 剩余元素的相对顺序不变,按原数组顺序输出即可。
        cur = []
        for i, x in enumerate(arr):
            if not removed[i]:
                cur.append(str(x))
        out.append(" ".join(cur))

    print("\n".join(out))

if __name__ == "__main__":
    solve()

2. 小兰的半径覆盖表

问题描述

平面上有 个整点,编号为

对任意两个不同的编号 ,以点 为支点,把线段 绕着点 旋转一整圈。这样扫过的区域,正好是一个以点 为圆心、以点 到点 的距离为半径的闭圆盘。

为这个圆盘里包含的其他点数,要求:

  • 自己不计入;
  • 也不计入;
  • 其余编号不同的点,只要落在这个圆盘内就计入答案;
  • 特别地,

请输出整个 的答案矩阵。

输入格式

每个测试文件包含多组数据。

第一行输入一个整数 ,表示测试数据组数。

对于每组数据:

  • 第一行输入一个整数 ,表示点的数量;
  • 接下来 行,每行输入两个整数 ,表示一个点的坐标。

输出格式

对于每组数据输出 行。

行输出 个整数,依次表示

样例输入

2
3
1 1
2 1
1 2
4
1 1
2 1
3 1
4 1

样例输出

0 1 1
0 0 1
0 1 0
0 0 1 2
1 0 1 2
2 1 0 1
2 1 0 0

数据范围

  • 单个测试文件中所有 的总和不超过

样例说明

样例 解释说明
以点 为圆心时,点 和点 到圆心的距离都等于 。所以无论半径取到点 还是点 ,另一个点也会被圈进去,答案都是
四个点都在一条直线上。以最左侧点为圆心时,半径越大,能覆盖到的其他点数也越多,因此最后一个位置会得到

题解

固定某个圆心 来看。

如果把其他点到点 的距离从小到大排好,那么对于某个点

  • 所有距离严格小于 的点,一定都在圆盘里;
  • 距离恰好等于 的点,也都在圆盘边界上,同样要计入。

所以, 实际上等于:

  • “距离不超过点 的那些点” 的总数量,
  • 再减去点 自己这一个。

这就变成了一道排序题。

对每个圆心

  1. 枚举所有 ,计算平方距离
  2. 按平方距离升序排序;
  3. 对于排序后的每一段“距离相同”的连续块,设它的右端点下标是
  4. 这个块里的任意一个点,答案都等于

这里使用的是从 开始的下标。因为到位置 为止一共有 个点,去掉当前这个点自己,剩下的就是 个点。

总共有 行,每一行都需要排一次长度为 的数组,所以总时间复杂度是 ,空间复杂度是

参考代码(Python)

import sys

def input() -> str:
    return sys.stdin.readline().strip()

def solve() -> None:
    t = int(input())
    out = []

    for _ in range(t):
        n = int(input())
        pts = [tuple(map(int, input().split())) for _ in range(n)]

        for i in range(n):
            cx, cy = pts[i]
            dist = []
            for j in range(n):
                if i == j:
                    continue
                dx = pts[j][0] - cx
                dy = pts[j][1] - cy
                # 只需要比较远近,保存平方距离就够了,还能避免开根号。
                dist.append((dx * dx + dy * dy, j))

            # 把其他点按“离当前圆心有多远”排序。
            dist.sort()
            row = [0] * n

            m = len(dist)
            l = 0
            while l < m:
                r = l
                while r + 1 < m and dist[r + 1][0] == dist[l][0]:
                    r += 1
                # 同一段等距离块里的点,能覆盖到的其他点数完全相同。
                for k in range(l, r + 1):
                    row[dist[k][1]] = r
                l = r + 1

            # row[j] 就是以点 i 为圆心、半径取

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

首先,个人的情况是,26届9本,一次算是金融小厂的开发实习,水分挺大的,目标后端。为了秋招,急急忙忙的补了两个烂大街的java项目吧,那时候简历写的不好,算法和八股也准备得不多,就开始去投递秋招了。&nbsp;因此,那时候也是好多公司笔试或者初筛都没过,浪费了好多机会。但是在秋招中后期,也算是醒悟了,去系统性的学习了相关的东西,终于也是在秋招末期十二月份左右,捡到一个西安年包22左右的offer。本以为这会是开始,有了保底,也算是有了继续春招的底气。在准备期间,也是新做了项目,持续的优化了简历。但是在春招,虽然笔试通过率提高了不少,但面试还是十分狼狈。更多更多的面试官将面试重点倾斜在了ai相关方面,我又被打了个措手不及。虽然后续也‘速成’了一下,然后又去持续的补全相关技能,但是后续已经根本约不到面试了。这或许也和秋招时候好多家都准备不充分直接去面试脏了面评也有些关系?期间一面挂,二面挂不计其数,后续的HR面结束之后告诉我最终结果未通过的也有几家。感觉心态已经从一开始的一约到面试就对未来入职这家公司充满期待,到后续的已经麻木的感觉。秋招面了三十余场,春招面了十余场。感觉自己就始终慢别人半拍,别人已经都开始完成一件事情了我才开始去做。也总会自欺欺人,假装自己已经完成然后心安理得去偷懒。其实就是重度拖延,但是一直改不过来。这快大半年的时间也是一边焦虑一边玩,工作也没找好玩也没玩好。或许是之前的学生时代都过得太顺了吧。相较于提高了自己的一些解决问题和分析问题的能力,这大半年的收获更多的体现在自己心态的提升上?感觉自己变更得佛系了但是无论情况怎么样,校招也算是告一段落了吧,也该翻篇了。或许以我的性格和习惯真不适合从事互联网相关工作,但是谁又知道以后会是什么样呢。在这里也是祝愿各位牛友收到自己心仪的offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务