美团2023春招笔试
美团2023年真题(Author:DH)
第一题
小美是一个火车迷。最近她在观察家附近火车站的火车驶入和驶出情况,发现火车驶入和驶出的顺序并不一致。经过小美调查发现,原来这个火车站里面有一个类似于栈的结构,如下图所示:
例如可能1号火车驶入了火车站种的休息区S,在驶出之前2号火车驶入了。那么在这种情况下,1号火车需要等待2号火车倒车出去后才能出去(显然被后面驶入的2号火车挡住了,这个休息区S只有一个出入口)。
出于好奇,小美统计了近些天的火车驶入驶出情况,开始统计和结束统计时休息区S均是空的。由于中途疏忽, 小美觉得自己好像弄错了几个驶入驶出顺序,想请你帮她验证一下。值得注意的是,小美虽然可能弄错了顺序,但对火车的记录是不重不漏的。
形式化地形容休息区S,我们视其为一个容量无限大的空间,假设两列火车i和j同时处于休息区S中,驶入时刻Tin满足Tin(i)<Tin(j),则驶出时间Tout必定满足Tout(i)>Tout(j),即,先进后出。
输入描述
1 |
|
输出描述
1 |
|
样例输入
1 |
|
样例输出
1 |
|
提示
1 |
|
题解
明显是一个栈的应用,模拟一个栈即可。
第二题
小美因乐于助人的突出表现获得了老师的嘉奖。老师允许小美从一堆n个编号分别为1,2,…,n的糖果中选择任意多个糖果作为奖励(每种编号的糖果各一个),但为了防止小美一次吃太多糖果有害健康,老师设定了一个限制:如果选择了编号为i的糖果,那么就不能选择编号为i-1,i-2,i+1,i+2的四个糖果了。在小美看来,每个糖果都有一个对应的美味值,小美想让她选出的糖果的美味值之和最大!作为小美的好朋友,请你帮帮她!
输入描述
1 |
|
输出描述
1 |
|
样例输入
1 |
|
样例输出
1 |
|
提示
1 |
|
题解
DP
第三题
小美明天要去春游了。她非常喜欢吃巧克力,希望能够尽可能多的巧克力在春游路上吃。她现在有n个巧克力,很巧的是她所有的巧克力都是厚度一样的正方形的巧克力板,这n个巧克力板的边长分别为a1,a2,…,an。因为都是厚度一致的正方形巧克力板,我们认为第i个巧克力的重量为ai2.小美现在准备挑选一个合适大小的包来装尽可能多的巧克力,她十分需要你的帮助来在明天之前准备完成,请你帮帮她。
输入描述
1 |
|
输出描述
1 |
|
样例输入
1 |
|
样例输出
1 |
|
提示
1 |
|
题解
方案1:离线 + 贪心
由于我们是先得到查询的序列,然后再输出答案,那么我们可以先将查询按照某种方式进行排列,最后输出时按照最原始的顺序输出即可。
对于这道题,我们首先应该想到一点:假设有一个小的巧克力和一个大的巧克力,如果我们背包能装下这个大的巧克力,那么我们一定能装下那个小的巧克力。而装下小的巧克力,背包剩余的空间越大,更利于装其他巧克力,所以我们要优先装下小的巧克力。(注意,本题要求的是巧克力数量最多,若求的是巧克力重量最大,那么题目就会变成一个0-1背包问题)
所以我们先把q按从小到大进行排序,然后把巧克力也从小到大排序,依次尝试放入即可。
方案2:贪心 + 前缀和 + 二分
同上述贪心思路,我们可以利用前缀和找到前几个巧克力的和能恰好放入背包中,即为答案。
第四题
小美因为自己差劲的表达能力而苦恼,小美想制作一个解释器,这样她可以在无法表达的情况下让解释器帮她解释。好巧不巧小美翻开了编译原理的书,找到了解释器的制作方式,她决定先制作一个书上习题中描述的小小解释器试试。
小美需要输入一行字符串,其格式为"key1=val1; key2=val2; …; keyn-1=valn-1;"(不包含引号)这样的n对key,value对,其中keyi和valuei为第i对key,value对,且均为仅包含大小写英文字母、数字与斜杠的非空字符串。例如对于字符串“SHELL=/bin/bash;HOME=/home/xiaomei;LOGNAME=xiaomei;”,那么其中包含三对key,value对,以(key,value)形式展示,分别为(SHELL,/bin/bash)、(HOME,/home/xiaomei)、(LOGNAME,xiaomei)。
接下来,小美的解释器需要接受q次询问,每次询问给出一个仅包含大小写英文字母、数字与斜杠的非空字符串,如果存在某对key,value对的key值与之相同,那么输出对应的value;如果存在多对key,value对的key值与之相同,那么输出其中编号最大的,也即最后那一对的value值;如果一对也不存在,那么输出EMPTY。
输入描述
1 |
|
1 |
|
输出描述
1 |
|
样例输入
1 |
|
样例输出
1 |
|
提示
1 |
|
题解
哈希表和字符串拆解的简单运用
第五题
小美特别爱吃糖果。小美家楼下正好有一个糖果专卖店,每天供应不同种类的糖果。小美预先拿到了糖果专卖店接下来n天的进货计划表,并针对每天的糖果种类标注好了对小美而言的美味值。小美当然想每天都能去买糖果吃,不过由于零花钱限制(小美零花钱并不多!)以及考虑健康,小美决定原则上如果今天吃了,那么明天就不能吃。但小美认为凡事都有例外,所以她给了自己k次机会,在昨天已经吃了糖果的情况下,今天仍然连续吃糖果!简单来说,小美每天只能吃一次糖果,原则上如果昨天吃了那么今天就不会吃,但有最多k次机会打破这一原则。
小美不想浪费每次吃糖果的机会,所以请你帮帮她规划一下她的吃糖计划,使得她能迟到的糖果美味值最大。
输入描述
1 |
|
输出描述
1 |
|
样例输入输出没有拍下来
题解
多维度dp,一个维度表示天数,一个维度表示吃不吃,另一个维度表示机会数
参考代码
1 |
|