美团后端笔试

文章目录

整场笔试下来,整体难度一般,只不过在第三题扑克牌游戏的时候进行的不是很顺利,附加题难度一般,不知道有没有小伙伴和我一样时间耗费在第三题上面的。

1.魔法外卖

题目描述:

炸鸡店拥有一名会传送魔法的外卖派送员。

该外卖派送员派送单子时,可以消耗时间t来正常派送单子(一次只能派送一个单子,不能多个同时派送),也可以使用魔法不耗费时间地隔空瞬间投送。

现在炸鸡店在时刻0接收到了若干炸鸡订单,每个单子都有它的截止送达时间。外卖派送员需要保证送达时间小于等于这个截止时间。

现在询问外卖员最少要使用几次魔法来保证没有外卖超时。

输入描述:

第一行两个正整数n, t 以空格分开,表示当前接到了n个订单,外卖员在不使用魔法的情况下正常派送所需要消耗的时间t。

第二行n个正整数,每个正整数表示一个订单的截止送达时间。

1 <= n <= 1e5, 1 <= t <= 100, 订单的送达时间介于[1, 1e7]之间

输出描述:

一行一个非负整数,表示外卖员最少需要使用的魔法次数。

样例输入

6 5

5 6 7 8 9 10

样例输出

4

这道题目思路很简单,我们只需要保证自己送完前一个的时间+t(送下一个外卖消耗的时间)小于等于下一个外卖的截止时间即可。

代码如下:

import java.util.Arrays;
import java.util.Scanner;

public class 魔法外卖 { 
    public static void main(String[] args) { 
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int t = scanner.nextInt();
        int[] times = new int[n];
        for (int i = 0; i < times.length; i++) { 
            times[i] = scanner.nextInt();
        }
        Arrays.sort(times);
        int num = 0;
        int time = 0;
        for (int i = 0; i < times.length; i++) { 
            //送完前一个的时间+t小于等于下一个的截止时间,就不用魔法
            if (time + t <= times[i]) { 
                time += t;
            } else { 
                num++;
            }
        }
        System.out.print(num);
    }

}

2.打扫房间

题目描述:

你买了一个扫地机器人,你想要知道这个扫地机器人是否能够将房间打扫干净。

为了简化问题,我们不妨假设房间被划分为nm的方格。定义打扫干净为这nm的方格全部被打扫过至少一次。

你为扫地机器人下达了若干指令。每个指令为上下左右移动中的一种。机器人会将经过的路径上的方格打扫干净。

初始时假设机器人处于第一行第一列的方格中。这个方格初始时会被机器人直接打扫干净。

现在询问你机器人能否将房间打扫干净,能则输出Yes,不能则输出No。

对于Yes的情况下,还要求你继续输出到哪个指令结束后,房间就打扫干净了。

对于No的情况下,还要求你输出还有多少个地块没有打扫干净。

保证机器人在打扫的过程中不会越过房间边界。换句话说机器人始终保持在n*m的方格图中。

输入描述

第一行三个正整数n, m, k,以空格分开,表示房间大小n*m,接下来会有长度为k的指令。

第二行长度为k的一个字符串。字符串中仅有下面四种字符(注意:均为大写)

  • W:表示下一步机器人将向上移动
  • A:表示下一步机器人将向左移动
  • S:表示下一步机器人将向下移动
  • D:表示下一步机器人将向右移动

保证2 <= n, m <= 100, 指令长度 <= 100000

输出描述

第一行一个字符串Yes或No表示能否打扫干净

对于Yes的情

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值