阿里笔试 通义实验室笔试 阿里秋招 1012

笔试时间:2025年10月12日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

天才同学在城市上班,每天上下班各一次,一共n天,因此总共有2n次出行,她主要乘坐地铁,且当月累计地铁花费具有分段优惠:

  • 默认单次地铁价格为x
  • 价格仅由本次乘车前的累计花费cost决定: 若cost ≤ a,单价为x若a < cost ≤ b,单价为y若cost > b,单价为z
  • 当月累计地铁花费在单次乘车后首次超过阈值a或b时,从"下一次"乘车起才按更低价格计费
  • 其中满足a < b,且票价严格单调递减:x > y > z

她在家里有j把伞,在公司有k把伞。若某次出行遇到下雨:

  • 若出发地有伞,则带上一把伞前往目的地,并将伞留在目的地
  • 若出发地没有伞,则这次改为打车(不坐地铁,不产生地铁花费)
  • 若不下雨,则这次一定乘地铁(不移动伞)

输入描述

  • 第一行输入八个整数 n, x, a, y, b, z, j, k(1 ≤ n ≤ 10000;0 < z < y < x ≤ 100;0 < a < b ≤ 10^9;0 ≤ j, k ≤ n),并保证a < b且x > y > z
  • 第二行输入一个长度为2n的仅由0、1构成的字符串s,从左到右依次表示2n次出行是否下雨。1表示第i次出行下雨,0表示不下雨。第2i-1次为早上从家到公司,第2i次为晚上从公司回家
  • 输出描述

    输出一个整数,表示整个月在地铁上的总花费

    样例输入

    3 5 10 3 20 1 1 0

    010110

    样例输出

    18

    共有3天,6次出行,字符串010110表示的依次为:不下雨、雨、不下雨、雨、雨、不下雨。初始家有1把伞,公司0把。逐次判断:

    • 第1次(家→公司,晴):坐地铁,花费5
    • 第2次(公司→家,雨):公司无伞,改打车
    • 第3次(家→公司,晴):坐地铁,花费5,累计10,刚累计未超10
    • 第4次(公司→家,雨):公司无伞,改打车
    • 第5次(家→公司,雨):家有伞,带去公司并留在公司,坐地铁,之前累计10,本次价格仍按5计费,乘车后累计为15,之后单次票价变为3
    • 第6次(公司→家,晴):坐地铁,当前单次票价为3,最终总花费为5+5+5+3=18

    参考题解

    解题思路:

    1. 维护家里和公司的伞数量
    2. 根据是否下雨和是否有伞决定是否坐地铁
    3. 累计地铁花费,根据累计值确定单次票价
    4. 注意票价在超过阈值后的下一次才生效

    C++:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int calc_price(int cost, int a, int b, int x, int y, int z) {
        if (cost <= a) return x;
        else if (cost <= b) return y;
        else return z;
    }
    
    pair<bool, pair<int, int>> process_trip(bool morning, bool rain, int home, int comp) {
        if (!rain) {
            return {true, {home, comp}};
        }
        if (morning) {
            if (home > 0) {
                return {true, {home - 1, comp + 1}};
            } else {
                return {false, {home, comp}};
            }
        } else {
            if (comp > 0) {
                return {true, {home + 1, comp - 1}};
            } else {
                return {false, {home, comp}};
            }
        }
    }
    
    int main() {
        int n, x, a, y, b, z, j, k;
        cin >> n >> x >> a >> y >> b >> z >> j >> k;
        string s;
        cin >> s;
        
        int total = 0;
        int h = j;
        int c = k;
        
        for (int i = 0; i < 2 * n; i++) {
            bool morning = (i % 2 == 0);
            bool rain = (s[i] == '1');
            
            auto result = process_trip(morning, rain, h, c);
            bool take_sub = result.first;
            h = result.second.first;
            c = result.second.second;
            
            if (take_sub) {
                int price = calc_price(total, a, b, x, y, z);
                total += price;
            }
        }
        
        cout << total << endl;
        return 0;
    }
    

    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 x = scanner.nextInt();
            int a = scanner.nextInt();
            int y = scanner.nextInt();
            int b = scanner.nextInt();
            int z = scanner.nextInt();
            int j = scanner.nextInt();
            int k = scanner.nextInt();
            String s = scanner.next();
            
            int total = 0;
            int h = j;
            int c = k;
            
            for (int i = 0; i < 2 * n; i++) {
                boolean morning = (i % 2 == 0);
                boolean rain = (s.charAt(i) == '1');
                
                Result result = processTrip(morning, rain, h, c);
                boolean takeSub = result.takeSub;
                h = result.home;
                c = result.comp;
                
                if (takeSub) {
                    int price = calcPrice(total, a, b, x, y, z);
                    total += price;
                }
            }
            
            System.out.println(total);
        }
        
        static int calcPrice(int cost, int a, int b, int x, int y, int z) {
            if (cost <= a) return x;
            else if (cost <= b) return y;
            else return z;
        }
        
        static Result processTrip(boolean morning, boolean rain, int home, int comp) {
            if (!rain) {
                return new Result(true, home, comp);
            }
            if (morning) {
                if (home > 0) {
                    return new Result(true, home - 1, comp + 1);
                } else {
                    return new Result(false, home, comp);
                }
            } else {
                if (comp > 0) {
                    return new Result(true, home + 1, comp - 1);
                } else {
                    return new Result(false, home, comp);
    

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

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

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

    全部评论

    相关推荐

    10-11 16:58
    已编辑
    小学 Java
    时间线:5.12入职,9.15提交自评,9.16&nbsp;ld说申请了E的名额,10.9转正答辩,答辩完一小时hr告知通过。offer要逐层审批到+5,流程大概要两周转正答辩参与人:+1,+2,+3,+4,hr,mt,我转正答辩流程:30分钟自述,20分钟提问(结果问了30分钟),我离场留10分钟大哥们讨论是否通过楼主背景:本科,第一次实习,后端研发岗(业务,c端)其他offer:腾讯意向,美团意向,京东昨天面完hr,网易面完hr有什么问题欢迎私信我,或者评论,可以分享自己的一点经验,知无不答答辩体验:在正式答辩之前&nbsp;ld&nbsp;跟我对了好几遍,跟我演练了两次,主要是教我怎么把东西讲顺,逻辑讲流畅,跟我对答辩文档的时候感觉还是学到了不少的。正式答辩也没有紧张(个人性格导致的吧),提问有技术方面,业务方面,针对我文档里提出的思考和想法追问落地构思,工作细节方面。从+2到+4都有提问,整体来说氛围挺好,不压抑,没有那种高高在上的态度。问题基本回答的七七八八吧,有一个不会直接说不知道了实习体验:做的其中一个东西有点难,花的时间很多,也不是很好推动,类似于架构上的改动吧,但是拿到了收益。其中有一段时间很忙,手上并发了四五个活,还要写转正文档(周末加班写的,甚至我好像还得新冠了),那段时间是真累,有的活又特别麻烦,门槛很好。总而言之就是很累吧浅薄的经验:给第一次实习的宝子们看的。太闲了咋办?字节这边刚进公司基本不会一上来就写代码,不要着急,前两周可以熟悉一下公司的基础架构,各种平台,问一下后面做哪个方向,熟悉一下业务,熟悉自己所在的组是干什么的,看看onepage之类的。lz也是第二周快结束了才接到第一个需求。如果过了一个月了还是很闲,最好主动去找mt要点活,也可以自己去熟悉业务+梳理整体链路(从客户端流量到你所负责的服务这种),看看各种指标转正怎么准备?一定要知道你所在的岗位公司看重什么能力,比如lz,需要熟悉业务,有工作,有产出,有自己的思考,能证明自己有推动复杂工作和大型团队合作的能力之类的。可以针对公司所看中的点沉淀一些文档,比如字节看重思考,我想到一个就写一个感觉做的工作没啥难度/不知道怎么介绍。lz是搞业务的,面试都是介绍业务+讲技术全链路,然后才是我做的工作。说实话这个我也不是特别懂该怎么办。lz被丢了一个超大活,架构改造,也拿到了很可观的产出。至于为什么ld让实习生做这些其实我也不知道。也可以看看这个帖子https://www.nowcoder.com/feed/main/detail/ce8417234c7148989e66ceef33a8d0fd?sourceSSR=search多的说不出来了,可能遇到了比较好的ld,愿意培养我,给我丢大活让我放开手脚干,我也愿意卷
    投递字节跳动等公司10个岗位
    点赞 评论 收藏
    分享
    评论
    点赞
    收藏
    分享

    创作者周榜

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