京东2025届秋招 算法开发工程师 第2批笔试

news2024/9/21 22:41:15

目录

  • 1. 第一题
  • 2. 第二题
  • 3. 第三题

⏰ 时间:2024/08/17
🔄 输入输出:ACM格式
⏳ 时长:2h

本试卷还有选择题部分,但这部分比较简单就不再展示。

1. 第一题

村子里有一些桩子,从左到右高度依次为 1 , 1 + 2 , 1 + 2 + 3 , . . . 1,1+2,1+2+3,... 1,1+2,1+2+3,...,每两颗桩子之间的间隔为 1 1 1。现在下了一场大雪,但是不知道雪下了多厚,现在给你两个数字,这是雪后某相邻两个桩子在雪面上的高度,请你通过这两个数字计算雪的厚度。

输入描述

在一行中输入两个正整数 a , b a, b a,b 1 ≤ a < b ≤ 5 ⋅ 1 0 5 1\leq a<b\leq5\cdot10^5 1a<b5105

输出描述

在一行中输出一个整数代表雪的厚度。我们可以证明,答案一定存在。

题解

只需注意到 a k − a k − 1 = k a_k-a_{k-1}=k akak1=k,于是可以用 b − a b-a ba 定位到右边柱子的下标,计算它的高度即可。

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
    i64 a ,b;
    cin >> a >> b;
    i64 k = b - a;
    i64 old_h = k * (k + 1) / 2;
    cout << old_h - b << endl;
    return 0;
}

2. 第二题

牛牛有一种锯齿状的积木,这种积木比较长,但是每个单位长度的高度是相等的,高度为 1 1 1 或者 2 2 2
现在牛牛拿出了两块长度分别为 n n n m m m 的积木,她现在想把这两块积木拼接在一起,即使中间有空隙也没有关系。但是拼接后的积木的高度要不超过 3 3 3,请你帮助牛牛计算在满足这个前提下拼接后的积木的长度最短可以是多少。
例如有两块形状如下的积木:

输入描述

第一行给出两个正整数 n , m n,m n,m,代表第一块和第二块积木的长度。
第二行给出 n n n 个数字代表第一块积木每个单位的高度。
第三行给出 m m m 个数字代表第二块积木每个单位的高度 1 ≤ n , m ≤ 1000 1\leq n,m \leq 1000 1n,m1000

输出描述

在一行中输出一个正整数代表拼接后积木的最短长度

题解

本题直接模拟即可。

说白了就是给定 a a a b b b 两个数组,初始时先让 a a a b b b 的左端对齐。

  • 先让 a a a b b b 上向右滑动,计算两者重叠部分的按位元素和,只要重叠部分中有一个位置出现了 > 3 >3 >3 的情况,说明当前拼接是无效的,继续右移。我们自然是希望 a a a 右移的距离尽可能地小
  • 再让 b b b a a a 上向右滑动,同样是找到正确的拼接位置,并使得 b b b 右移的距离尽可能小。
  • 还要考虑一种特殊情况就是无法上下拼接,此时需要将 a a a b b b 直接横向连接,长度为 m + n m+n m+n
#include <bits/stdc++.h>

using namespace std;

int min_len(const string& a, const string& b) {
    int n = a.length(), m = b.length();
    // a在b上滑动
    for (int i = 0; i < m; i++) {
        bool valid = true;
        for (int j = i; j < i + n && j < m; j++) {
            if (a[j - i] - '0' + b[j] - '0' > 3) {
                valid = false;
                break;
            }
        }
        if (valid)
            return max(m, i + n);
    }
    return m + n;
}

int main() {
    int n, m;
    cin >> n >> m;

    string a, b;
    cin >> a >> b;

    cout << min(min_len(a, b), min_len(b, a)) << endl;

    return 0;
}

3. 第三题

牛牛也是要回家过年的呢。
牛牛所在的国家有 n n n 座城市, m m m 条有向道路,第 i i i 条道路由城市 u i u_i ui 通往城市 v i v_i vi,通行费为 w i w_i wi
作为一头豪气的牛,希望他回家的花费是一个特殊的数字(例如666元)。具体的说,牛牛希望从城市 1 1 1 移动到城市 n n n,并恰好花费 a a a 元。
请你告诉牛牛,他有多少种回家的方案?

输入描述

第一行三个整数 n , m , a   ( 1 ≤ n ≤ 100 , 1 ≤ m ≤ 1000 , 1 ≤ a ≤ 1000 ) n,m,a\,(1\leq n\leq 100,1\leq m\leq 1000,1\leq a\leq1000) n,m,a(1n100,1m1000,1a1000),含义如题面所示。
接下来 m m m 行,第 i i i 行三个整数 u i , v i , w i   ( 1 ≤ u i , v i ≤ n , 1 ≤ w i ≤ a ) u_i,v_i,w_i\,(1\leq u_i,v_i\leq n,1\leq w_i\leq a) ui,vi,wi(1ui,vin,1wia),描述了一条道路。

输出描述

如果牛牛回家的方案数大于等于 20220201 20220201 20220201 种,请你在第一行输出 All roads lead to Home!,然后在第二行输出回家的方案数对 20220201 20220201 20220201 取模的结果。
否则只需要输出一行一个整数,表示牛牛回家的方案数。

题解

本题使用动态规划求解。

d p [ i ] [ j ] dp[i][j] dp[i][j] 为从城市 1 1 1 到城市 i i i,花费恰好为 j j j 的方案数。由于从 1 1 1 1 1 1 花费为 0 0 0,也算是一种方案,因此 d p [ 1 ] [ 0 ] = 1 dp[1][0]=1 dp[1][0]=1,其他地方为 0 0 0

假设 u → w v u\overset{w}{\to} v uwv,且在城市 u u u 的时候已经花费了 j j j,那么有如下的转移方程

d p [ v ] [ j + w ] = d p [ u ] [ j ] + d p [ v ] [ j + w ] dp[v][j + w]=dp[u][j]+dp[v][j +w] dp[v][j+w]=dp[u][j]+dp[v][j+w]

注意,在计算 v v v 的时候,我们必须要保证 u u u 已经计算完毕,因此要按照拓扑序进行计算。

#include <bits/stdc++.h>

using namespace std;

const int MOD = 20220201;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m, a;
    cin >> n >> m >> a;

    vector<vector<pair<int, int>>> graph(n + 1);
    vector<int> in(n + 1, 0);

    for (int i = 0; i < m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        graph[u].emplace_back(v, w);
        in[v]++;
    }

    vector<vector<int>> dp(n + 1, vector<int>(a + 1, 0));
    vector<bool> st(n + 1, 0);
    dp[1][0] = 1;

    queue<int> q;
    for (int i = 1; i <= n; i++) {
        if (!in[i]) q.push(i);
    }

    while (!q.empty()) {
        auto u = q.front();
        q.pop();

        for (auto &[v, w]: graph[u]) {
            if (!--in[v]) q.push(v);
            for (int j = 0; j + w <= a; j++) {
                if (dp[v][j + w] + dp[u][j] >= MOD || st[u]) {
                    st[v] = true;
                }
                dp[v][j + w] = (dp[v][j + w] + dp[u][j]) % MOD;
            }
        }
    }

    if (st[n]) cout << "All roads lead to Home!" << endl;
    cout << dp[n][a] << endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库的系统视图v$reserved_words

达梦数据库的系统视图v$reserved_words 达梦数据库&#xff08;DM Database&#xff09;提供了一系列系统视图以帮助管理员和开发人员了解数据库的状态和配置。V$RESERVED_WORDS 是其中一个系统视图&#xff0c;它显示了数据库系统中已保留的关键字。这些关键字在SQL语句中具有…

SpringBoot自动配置--原理探究

什么是自动配置&#xff1f; SpringBoot自动配置是指在SpringBoot应用启动时&#xff0c;可以把一些配置类自动注入到Spring的IOC容器中&#xff0c;项目运行时可以直接使用这些配置类的属性。简单来说就是用注解来对一些常规的配置做默认配置&#xff0c;简化xml配置内容&…

【三维目标检测】H3DNet(三)

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 H3DNet数据和源码配置调试过程以及主干网络介绍请参考上一篇博文&#xff1a;【三维目标检测】H3DNet&am…

[Java]面向对象-内部类

类的五大成员&#xff1a;属性、方法、构造方法、代码块、内部类 内部类 在一个类里边再定义一个类。可以在外部其他类中创建内部类对象并调用它的方法 public class Outer {//外部类public class inner{//内部类} } 内部类使用时机&#xff1a; 内部类表示的事物是外部类…

打造高可用集群的基石:深度解析Keepalived实践与优化

高可用集群 集群类型 集群类型主要分为负载均衡集群&#xff08;LB&#xff09;、高可用集群&#xff08;HA&#xff09;和高性能计算集群&#xff08;HPC&#xff09;三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群&#xff08;LB&#xff09; 负载均衡集…

drawio的问题

drawio的问题 先给出drawio的链接https://app.diagrams.net/ 我在用overleaf写论文的过程中&#xff0c;发现了一个问题&#xff0c;就是使用drawio画好图之后&#xff0c;只能保存以下几个选项&#xff1a; 但是不管是什么类型&#xff0c;在overleaf上面图片都不显示。如果…

SpringBoot如何做自动配置

目录 一、什么是springboot的自动配置&#xff1f; 二、Enable注解 三、springboot自动配置流程 ComponentScan SpringBootConfiguration EnableAutoConfiguration注解 condition的几个注解&#xff1a; 四、自定义启动类 需求&#xff1a; 参考&#xff1a; 实现步…

使用JQUERY请求数据出现500报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&a…

【数学建模】趣味数模问题——四人追逐问题

问题描述&#xff1a; 如图所示&#xff0c;在正方形ABCD的四个顶点各有一个人。在初始时刻 t0 时&#xff0c;四人同时出发&#xff0c;以匀速 v 沿顺时针方向朝下一个人移动。如果他们始终对准下一个人为目标行进&#xff0c;最终结果会如何&#xff1f;需要作出各自的运动轨…

路径规划 | 灰狼算法+B样条曲线优化无人机三维路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 灰狼算法B样条曲线优化无人机三维路径规划&#xff08;Matlab&#xff09; 群智能路径规划算法。三维灰狼算法&#xff08;GWO&#xff09;加B样条曲线优化的matlab代码。无人机&#xff08;UAV&#xff09;路径规划…

QT:安装软件

QT 介绍 QT是一个跨平台的C应用程序开发框架&#xff0c;具有广泛的应用领域和强大的功能。 定义&#xff1a;QT是一个跨平台的C图形用户界面应用程序框架&#xff0c;为开发者提供了建立艺术级图形界面所需的所有功能。 特点&#xff1a;QT具有短平快的优秀特质&#xff0c;即…

csrf漏洞(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文依靠phpstudy以及dvwa靶场进行操作&#xff0c;具体搭建流程参考&#xff1a;xss漏洞&#xff08;二&#xff0c;xss靶场搭建以及简单利用&#xff09; 前篇…

Godot关于3d射线投射的一些问题

首先你得把刚体模式激活如图否则将是空对象 为了区分其他坐标颜色园哥把射线设置成紫色以示区别 另外运行模式中貌似射线不可见只在调试模式中可见。最后查看调试器 成功碰撞一个名为主角的物体&#xff0c;也许都命中了但是方法只返回第一个命中的物体&#xff0c;吐槽一下&a…

场外个股期权如何发出行权指令?

场外期权行权指令也就是平仓指令的意思&#xff0c;一般场外个股期权交易有三种方式开仓和行权平仓指令&#xff0c;分别是市价&#xff0c;限价和半小时询价&#xff0c;跟普通股票的买卖和交易方式类似&#xff0c;唯一区别是手动发出场外个股期权的行权指令&#xff0c;下文…

Linux系统中的高级系统资源管理技术:systemd资源控制

在当今信息技术的快速发展中&#xff0c;服务器的性能管理和资源分配变得尤为重要。Linux操作系统以其灵活性和可定制性在服务器领域广受欢迎。而在Linux系统中&#xff0c;systemd资源控制作为一项重要的高级系统资源管理技术&#xff0c;为管理员提供了精细化控制和调整系统服…

STM32标准库学习笔记-2.GPIO

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 标准库开发新建工程准备工作&#xff1a; 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号STM32F103C8T6工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工…

【leetcode详解】实现一个魔法字典(思路详解 错误反思)

关于输入的解释&#xff1a; ‘ 输入 ’下方第一个列表是“调用函数”&#xff0c;第二个列表是“提供的字符串”&#xff0c;二者一一对应 如示例中buildDict对应[[“hello”, "leetcode"]]&#xff0c;即构建的字典包含 “hello” 和 "leetcode" 两个字…

基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎

开源交易所&#xff0c;基于Laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理&#xff08;后端前端&#xff09;、前台&#xff08;交易页面、活动页面、个人中心等&#xff09; 特色&#xff1a;…

smbms

框架 数据库 项目如何搭建 考虑使不使用maven&#xff0c;依赖与jar包 项目搭建准备工作 搭建一个maven web项目配置tomcat测试项目是否能够跑起来导入项目中会遇到的jar包 //jsp、servlet、mysql驱动、jstl、stand.... <dependency><groupId>junit</groupI…

链表的删除 203、237、19 链表的遍历 430

203. 移除链表元素&#xff08;简单&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解法一、递归 见代码 链表的定义具有递归的性质&#xff0c;所以遍历也可以以递归的方…