京东笔试 京东笔试题 0802

笔试时间:2025年8月2日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:排队

某个银行只有一个营业员,只能同时办理一个人的业务。因为营业员人数有限,所以除了首个办理业务的人之外,其他所有人都需要等待前一个办理业务的人办理完成。

假设现在有n个人需要办理业务,第i个人的业务需要办理a[i]分钟。

由于业务的特殊性,第i个人每等1分钟,他最终办理业务的时间就会多b[i]分钟。

作为志愿者,你的任务就是安排他们的先后顺序,使每个人办理业务的总时间(包括等待时间)之和最小。

输入描述

第一行一个数n,表示有n个人(1<=n<=10000)。

接下来n行,每行两个数a[i],bi。

输出描述

一行一个整数,输出最小时间。如果答案过大,需要对10000000009取模(求余)。

样例输入

2

1 1

2 5

样例输出

5

提示:若第1个人先办理业务,然后第2个人办理业务: 第1个人办理业务的时间是1分钟 第2个人办理业务的时间是2+15=7分钟 总时间之和为8分钟 若第2个人先办理业务,然后第1个人办理业务: 第2个人办理业务的时间是2分钟 第1个人办理业务的时间是1+21=3分钟 总时间之和为5分钟 所以最小时间是5分钟。

参考题解

每个人的业务办理时间包括基础时间a[i]和等待时间乘以系数b[i](即每等待1分钟,业务时间增加b[i]分钟)。最优的排序策略是按照a[i]/b[i]的比值从小到大排序,这样可以最小化总时间。计算总时间时,我们模拟每个人的办理过程,累加每个人的实际时间,并更新等待时间总和。通过贪心策略,将a[i]/b[i]比值最小的人排在前面。这等价于比较a[i]*b[j]和a[j]*b[i]:若a[i]*b[j] < a[j]*b[i],则i应排在j前面。按排序顺序处理每个人,计算每个人的实际时间T = a[i] + 当前等待时间总和 * b[i]。累加每个人的实际时间得到总时间,并更新等待时间总和。

C++:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll mod = 1000000009;

struct Pair {
    ll a, b;
};

bool cmp(const Pair &x, const Pair &y) {
    return x.a * y.b < y.a * x.b;
}

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

    int n;
    cin >> n;
    vector<Pair> arr(n);

    for (int i = 0; i < n; i++) {
        cin >> arr[i].a >> arr[i].b;
    }

    sort(arr.begin(), arr.end(), cmp);

    ll total_time = 0;
    ll current_sum = 0;

    for (auto &p : arr) {
        ll T = (p.a + current_sum * p.b) % mod;
        total_time = (total_time + T) % mod;
        current_sum = (current_sum + T) % mod;
    }

    cout << total_time << "\n";
    return 0;
}

Java:

import java.util.*;

public class Main {
    static final long mod = 1000000009L;

    static class Pair {
        long a, b;
        Pair(long a, long b) {
            this.a = a;
            this.b = b;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<Pair> arr = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            long a = sc.nextLong();
            long b = sc.nextLong();
            arr.add(new Pair(a, b));
        }

        arr.sort((x, y) -> {
            long cmp = x.a * y.b - y.a * x.b;
            if (cmp < 0) return -1;
            else if (cmp > 0) return 1;
            return 0;
        });

        long total_time = 0;
        long current_sum = 0;

        for (Pair p : arr) {
            long T = (p.a + current_sum * p.b) % mod;
            total_time = (total_time + T) % mod;
            current_sum = (current_sum + T) % mod;
        }

        System.out.println(total_time);
    }
}

Python:

import functools

mod = 1000000009
n = int(input())
arr = []
for _ in range(n):
    a, b = map(int, input().split())
    arr.append((a, b))

def cmp(x, y):
    a1, b1 = x
    a2, b2 = y
    if a1 * b2 < a2 * b1:
        return -1
    elif a1 * b2 >

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

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

部门是到家相关(拼好饭神券包医药等)底层技术支持,确实要求比较高一些4.14一面拷打点评1.&nbsp;下单后还是支付后生成订单2.&nbsp;如果消息队列没处理到信息用户就完成了支付呢3.&nbsp;缓存如果运营活动开始前临时修改了配置怎么办4.&nbsp;怎么评估kafka是否匹配当前流量场景5.&nbsp;怎么调整分区数消费者数来应对高流量6.&nbsp;怎么大致评估需要多少分区(除了压测)八股1.&nbsp;线程池参数2.&nbsp;线程池创建流程(任务执行流程)3.&nbsp;MySQL索引,表+5个sql判断使用索引的方式,最左匹配,覆盖索引手撕-三数之和4.17二面实习os1.&nbsp;进程线程2.&nbsp;孤儿进程3.&nbsp;进程通讯方式4.&nbsp;用户态内核态5.&nbsp;死锁条件6.&nbsp;怎么检测解除死锁7.&nbsp;epoll性能永远高于poll吗?8.&nbsp;虚拟内存9.&nbsp;分页分段10.&nbsp;页面置换swap的几个算法11.&nbsp;最优置换算法12.&nbsp;如何评估算法好坏redis1.&nbsp;为什么zset用skiplist不用b+树2.&nbsp;为什么快3.&nbsp;string类型底层优化4.&nbsp;数据持久化5.&nbsp;aof先命令还是先日志6.&nbsp;aof重写7.&nbsp;内存淘汰计网1.&nbsp;ping是什么协议2.&nbsp;在哪一层3.&nbsp;tcp可靠性4.&nbsp;如何判断数据是否损坏5.&nbsp;timewait是什么怎么出现6.&nbsp;大量的timewait有什么问题mysql1.&nbsp;b+树索引2.&nbsp;能否无上限加索引3.&nbsp;怎么判断索引好坏java1.&nbsp;copyonwritearraylist2.&nbsp;线程池依据什么参数怎么调整jvm1.&nbsp;怎么判断是垃圾?2.&nbsp;引用计数法完全不能用吗?无手撕,一道aicoding
发面经攒人品
点赞 评论 收藏
分享
05-06 20:15
门头沟学院 Java
timeline&nbsp;见上条帖子,流程推进的十分神速,感谢东哥---一面&nbsp;(30min)1.&nbsp;自我介绍2.&nbsp;本科成绩如何,是否有奖学金3.&nbsp;项目里挑一两个认为有挑战的点讲一讲4.&nbsp;设计模式了解哪些5.&nbsp;口述观察者模式,代码怎么写6.&nbsp;给定一组学生,要求按照学历,成绩一次排序,代码怎么写Collections.sort()&nbsp;重写排序方法下面单纯闲聊环节抗压能力如何,对互联网强度认知如何,什么时间到岗,实习多久,购物贷和现金贷的区别其实一面答的并不好,但是面试刚结束面试官就打电话问晚上有没有空二面,这时候感觉运气要来了---二面&nbsp;(30min)前面一些java的常规八股,类加载机制,双亲委派,还有几个八股都很常规后面是一个agent相关的八股,不太记得了,主要问了rag多路检索,提示词优化,提示词投毒后面依旧闲聊,未来规划,对互联网强度的看法反问:部门的ai&nbsp;coding率&nbsp;:30%(金融业务比较严谨)什么时候出结果:很快果然很快,面完五分钟邮件约三面了,感叹东子效率这么高吗,难道说---三面(30min)找暑期实习以来第一次hr面,感觉不太常规没有问题性格,规划,到岗时间,企业价值观之类可能因为自我介绍的时候说了目前在一家初创公司实习,所以面试官很感兴趣,一直问我这短暂的实习里做了什么,让我以非技术性的语言向面试官解释,中间还讨论了人工智能伦理(初创公司实习主要做skill相关),最后反问结果说最快本周,但是隔了一个五一假期,等待的挺心急的,实际上三面到oc用了1.5个工作日---5.6中午电话oc感觉像做梦一样,可能真狗运到了吧,面试问的很简单,和东哥做兄弟啦---PS:为什么会在初创公司实习因为三月底的时候感觉暑期实习无望,联系了家校友企业,边干边找实习,准备把战线拉到六月份,在初创公司也跟着老板学到了不少思路上的东西,虽然实习经历没写到简历上但是每次自我介绍的时候都会提一嘴,这样面试官感兴趣的话也可以聊一聊,感谢校友收留
查看24道真题和解析
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

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