【秋招笔试】09.28京东秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

✨ 本系列打算持续跟新 春秋招笔试题

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新

🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。

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

alt

🌈 京东秋招笔试,来啦!!!

🍥 本次三题难度不大,前两题比较容易,第三题需要离散化,笔试中出现过很多次了

1️⃣ 根据对应的输入贪心模拟即可

2️⃣ 思维+模拟题,分析出来三个图的面积分别由什么构成,难度不大

3️⃣ 离散化+最短路,本题需要看出离散化这个知识点

🪴 01.LYA的秘密花园 评测链接🔗

问题描述

LYA是一位热爱园艺的年轻女孩。她在自家后院建造了一个秘密花园,里面种植了各种珍稀植物。为了保护这些植物不被偷盗,LYA设计了一个特殊的密码锁系统。

这个系统需要输入一个正整数作为密码。LYA每天都会更换密码,并给她的好朋友K小姐一些提示。每个提示包含两个数字 ,表示当天的密码与 的差的绝对值不超过

今天,K小姐收到了 个这样的提示。她想知道,根据这些提示,最大可能的密码是多少。你能帮助K小姐找出这个数字吗?

输入格式

第一行包含一个整数 ,表示提示的数量。

接下来的 行,每行包含两个整数 ,表示一个提示。

输出格式

输出一个整数,表示满足所有提示的最大可能密码。如果不存在满足所有提示的密码,输出

样例输入

3
3 3
2 5
5 3

样例输出

6

样例输入

3
1 1
2 2
3 3

样例输出

2

数据范围

题解

贪心

本质上是在寻找多个区间的交集的最大值。

每个提示 实际上定义了一个区间 ,需要找出所有这些区间的交集的最大值。

解题思路如下:

  1. 初始化答案区间为

  2. 对于每个提示 ,更新答案区间:

    • 区间左端点 = max(当前左端点, )
    • 区间右端点 = min(当前右端点, )
  3. 在处理完所有提示后,如果左端点大于右端点,说明不存在满足所有提示的密码,返回

  4. 否则,右端点就是要找的最大可能密码。

参考代码

  • Python
# 读取提示的数量
Q = int(input())

# 初始化答案区间
left, right = 0, 10**9

# 处理每个提示
for _ in range(Q):
    # 读取提示
    M, D = map(int, input().split())
    
    # 更新区间
    left = max(left, M - D)
    right = min(right, M + D)

# 检查是否存在满足所有提示的密码
if left > right:
    print(-1)
else:
    print(right)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取提示的数量
        int Q = scanner.nextInt();
        
        // 初始化答案区间
        long left = 0, right = 1_000_000_000;
        
        // 处理每个提示
        for (int i = 0; i < Q; i++) {
            // 读取提示
            long M = scanner.nextLong();
            long D = scanner.nextLong();
            
            // 更新区间
            left = Math.max(left, M - D);
            right = Math.min(right, M + D);
        }
        
        // 检查是否存在满足所有提示的密码
        if (left > right) {
            System.out.println(-1);
        } else {
            System.out.println(right);
        }
        
        scanner.close();
    }
}
  • Cpp
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int Q;
    cin >> Q;  // 读取提示的数量

    long long left = 0, right = 1e9;  // 初始化答案区间

    // 处理每个提示
    for (int i = 0; i < Q; i++) {
        long long M, D;
        cin >> M >> D;  // 读取提示

        // 更新区间
        left = max(left, M - D);
        right = min(right, M + D);
    }

    // 检查是否存在满足所有提示的密码
    if (left > right) {
        cout << -1 << endl;
    } else {
        cout << right << endl;
    }

    return 0;
}

🧸 02.立体花园设计 评测链接🔗

问题描述

K小姐是一位著名的景观设计师,她正在为一个新的立体花园项目设计布局。这个花园由一个矩形网格组成,每个格子里可以堆叠不同高度的花盆。K小姐想要知道从不同角度看这个花园时的视觉效果。

具体来说,K小姐需要计算从正面、左侧和顶部观察花园时看到的面积。每个花盆的底面积为1平方单位,高度为1单位。

输入格式

第一行包含两个整数 ,分别表示花园的行数和列数。

接下来的 行,每行包含 个整数 ,表示第 行第 列格子中堆叠的花盆数量。

输出格式

输出一行,包含三个整数,分别表示从正面、左侧和顶部观察时看到的面积。

样例输入

2 3
3 3 2
3 2 1

样例输出

8 6 6

数据范围

题解

枚举+思维

  1. 正面观察: 从正面看,只能看到每一列中最高的花盆。因此,需要找出每一列的最大值,然后将这些最大值相加。

  2. 左侧观察: 类似地,从左侧看,只能看到每一行中最高的花盆。需要找出每一行的最大值,然后将这些最大值相加。

  3. 顶部观察: 从顶部看,能看到所有非空的格子。因此,只需要计算有花盆的格子数量。

参考代码

  • Python
  # 读取输入
  n, m = map(int, input().split())
  garden = [list(map(int, input().split())) for _ in range(n)]

  # 初始化结果变量
  front_view = 0  # 正面观察面积
  side_view = 0   # 左侧观察面积
  top_view = 0    # 顶部观察面积

  # 初始化每列的最大高度
  col_max = [0] * m

  # 遍历花园
  for i in range(n):
      row_max = 0  # 当前行的最大高度
      for j in range(m):
          height = garden[i][j]
          if height > 0:
              top_view += 1  # 顶部可见
          row_max = max(row_max, height)  # 更新行最大值
          col_max[j] = max(col_max[j], height)  # 更新列最大值
      side_view += row_max  # 累加左侧可见面积

  # 计算正面可见面积
  front_view = sum(col_max)

  # 输出结果
  print(front_view, side_view, top_view)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] garden = new int[n][m];
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                garden[i][j] = scanner.nextInt();
            }
        }
        
        // 初始化结果变量
        int frontView = 0;  // 正面观察面积
        int sideView = 0;   // 左侧观察面积
        int topView = 0;    // 顶部观察面积
        
        // 初始化每列的最大高度
        int[] colMax = new int[m];
        
        // 遍历花园
        for (int i = 0; i < n; i++) {
            int rowMax = 0;  // 当前行的最大高度
            for (int j = 0; j < m; j++) {
                int height = garden[i][j];
                if (height > 0) {
                    topView++;  // 顶部可见
                }
                rowMax = Math.max(rowMax, height);  // 更新行最大值
                colMax[j] = Math.max(colMax[j], height);  // 更新列最大值
            }
            sideView += rowMax;  // 累加左侧可见面积
        }
        
        // 计算正面可见面积
        for (int max : colMax) {
            frontView += max;
        }
        
        // 输出结果
        System.out.println(frontView + " " + sideView + " " + topView);
        
        scanner.close();
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    // 读取花园布局
    vector<vector<int>> garden(n, vector<int>(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> garden[i][j];
        }
    }
    
    // 初始化结果变量
    int front_view = 0;  // 正面观察面积
    int side_view = 0;   // 左侧观察面积
    int top_view = 0;    // 顶部观察面积
    
    // 初始化每列的最大高度
    vector<int> col_max(m, 0);
    
    // 遍历花园
    for (int i = 0; i < n; ++i) {
        int row_max = 0;  // 当前

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

学长刷题笔记 文章被收录于专栏

这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的

全部评论
请问测评链接点进去显示没有权限是因为什么
点赞 回复 分享
发布于 09-30 10:17 上海

相关推荐

面经:1,上来就有一个英文自我介绍,说的稀碎2,让我用中文介绍了读研期间的机械臂项目,并问了ros,相机标定,坐标系转换,算法设计动机,在里面承担什么角色等项目相关的问题3,让我介绍第二个java项目,kafak怎么用的4,为何选择天津和联想(表忠心的时候到了!!!)5,对这个岗位的了解,然后给我介绍了一下岗位,我恩恩啊啊表示很感兴趣(继续发力表忠心)6,找工作看重什么?我说一是行业和我个人的发展,二是和生活的平衡,不要加班太严重,要有双休。面试官表示联想工作氛围还是很好的,更像一个外企(doge)7,反问,还有下一轮面试吗----------------分界线----------------听说写面经会增大面试通过成功的概率,冲冲冲啊----------------分界线----------------&nbsp;收到二面通知&nbsp;二面结束&nbsp;&nbsp;&nbsp;&nbsp;基本就是hr面主管面1,有英语问题,问你的优缺点。2,对城市的选择。3,对岗位的了解。4,对加班的理解。联想2025届校招正式启动啦!【校招项目】面向应届毕业生,岗位涉及各个业务部门;【全球管培生GFL项目】聚焦全球顶尖院校的高潜质应届生人才,通过轮岗机会/高管一对一指导/定制化培养/优厚的薪酬福利,助你快速提升能力,并致力培养成为联想业务管理者。申请此项目需提交英文简历。❗两个项目可同时投递,早投递早面试,各个专业均有合适的岗位【校招岗位】产品与项目、技术、市场与销售、职能、供应链、设计等【20+工作地点】北京、上海、深圳、天津、武汉、成都、广州、杭州、南京、厦门、长沙、郑州、济南、沈阳、哈尔滨、昆山、南宁、东京、莫里斯维尔等【投递链接】https://talent.lenovo.com.cn/home【内推码】XZLMCWC2025(简历优先筛选,后续有疑问或者流程问题欢迎随时联系)【内推入口】在“联想校招官网”投递校招职位,创建简历时“从哪儿获知招聘信息”选择“联想员工推荐”并且输入推荐人ITcode:XZLMCWC2025
联想
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务