链接:公司食堂_美团笔试题_牛客网

题目也好,题解也好,都倾向于用小根堆(优先队列)解决问题。复杂度确实是O(nlogn)。通过多次提交发现,题目会卡常,必须用c语言的scanfprintf输入输出,使用c++,即便复杂度更低,仍然超时。

介绍一种O(n)的做法,使用队列。
把桌子分为两类:

A类:坐人数量为0(即有两个空座),

B类:坐人数量1(一个空座)。

根据题意,A类桌子如果有人坐下,那么将会变成B类的桌子。采用贪心的思想,M必须先选B类,仅当B类没有时,才选A类。F则正相反。因此,定义三个队列q0,q1,qb:

q0:存储A类-坐人数量为0

q1:存储B类-坐人数量为1

qb:存储A类转换得到的B类

先扫描一次桌子序列,按编号升序的方式将A、B类,分别存储到q1和q0队列中。

在职员进入餐厅时,先确认使用哪一类桌子。如果选择B类很简单,只要从q0中拿取桌号。注意此时B类桌子坐下一个人后会变成A类桌子,把这张桌子放入队列qb存储(显然这个队列也是升序的)。选择A类时,需从q1和qb中选取编号更小的。

每次选择桌号复杂度均为O(1),因此算法总复杂度为O(n+m)

ps:本题卡常,AC重点并非算法复杂度,而是输入输出方式,c++必须使用scanf的方式。

提交发现,使用queue队列类型仍有未知错误,下面代码使用的是三个静态单链表来模拟队列。

#include <bits/stdc++.h>
using namespace std;
int f0,r0,f1,r1,f3,r3,nex[500005];
void ass(int i)
{if(i==0){printf("%d\n",f0);int temp=nex[f0];if(f3==0)f3=r3=f0;elsenex[r3]=f0,r3=f0;nex[f0]=0;f0=temp;}else if(i==1){if(f3==0||f1&&f1<f3){printf("%d\n",f1);f1=nex[f1];}else if(f1==0||f3&&f3<f1){printf("%d\n",f3);f3=nex[f3];}}
}
int main()
{int i,j,t,n,m;char ch;scanf("%d",&t);while(t--){scanf("%d",&n);getchar();f0=r0=f1=r1=f3=r3=0;/**< 三个单链表模拟队列,指针为空 */memset(nex,0,sizeof(nex));/**< nex数组实现链式 */for(i=1; i<=n; i++){ch=getchar();if(ch=='0'){if(f0==0)f0=r0=i;/**< 空表 */elsenex[r0]=i,r0=i;/**< 非空表 */}else if(ch=='1'){if(f1==0)f1=r1=i;elsenex[r1]=i,r1=i;}}scanf("%d",&m);getchar();for(i=1; i<=m; i++){ch=getchar();if(ch=='M'){if(f3||f1)/**< 两个链有一个不空,就选择B类 */ass(1);elseass(0);/**< 没有B类桌子,选A类 */}else{if(f0)ass(0);elseass(1);}}}return 0;
}

公司食堂-美团2021校招笔试(线性数据结构的应用)相关推荐

  1. 美团2021校招笔试-编程题-第10场

    链接:淘汰分数_美团笔试题_牛客网 来源:牛客网 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2-.a_n,小美作为比赛的裁判希望设定一个分数线m,使得所 ...

  2. 【编程笔试】美团2021校招笔试-通用编程题第4场(附思路及C++代码)

    导览 练习地址 小团无路可逃 小团的神秘暗号 小团的选调计划 小团的默契游戏 总结 练习地址 点此前往练习 小团无路可逃 小团惹小美生气了,小美要去找小团"讲道理".小团望风而逃, ...

  3. 【编程笔试】美团2021校招笔试-通用编程题第1场(附思路及C++代码)

    导览 练习地址 小美的送花路线 小美的评分计算器 小美的外卖省钱计划 小美的代金券要过期啦 总结 练习地址 点此前往练习 小美的送花路线 小美是美团的一名鲜花快递员,鲜花是一种保质期非常短的商品,所以 ...

  4. 美团2021校招笔试-编程题(通用编程试题,第1场)1. 小美的送花线路

    小美是美团的一名鲜花快递员,鲜花是一种保质期非常短的商品,所以需要尽快送到客户手中,公司对于骑手的一个要求就是要规划送花的线路,使得骑手送完所有订单走的路程尽可能少.(骑手开始派送时带走了所有需要派送 ...

  5. 【编程笔试】美团2021校招笔试-通用编程题第9场(附思路及C++代码)

    导览 练习地址 糕点 晋级人数 回转寿司 神秘的苹果树 总结 练习地址 点此前往练习 糕点 小团的蛋糕铺长期霸占着美团APP中"蛋糕奶茶"栏目的首位,因此总会吸引各路食客前来探店. ...

  6. 美团2021校招笔试-编程题(通用编程试题,第1场)2. 小美的评分计算器

    美团对于商家的评价体系是1-5星评价体系,用户在完成订单之后可以对商家打1/2/3/4/5星,而在客户端上,商家的评级却不一定是整数,而是会显示小数点后的一位.很显然这就需要一个计算器了,小美拥有了一 ...

  7. 美团2021校招笔试-编程题(通用编程试题,第9场)

    第一题题目没看懂 团的蛋糕铺长期霸占着美团APP中"蛋糕奶茶"栏目的首位,因此总会吸引各路食客前来探店. 小团一天最多可以烤n个蛋糕,每个蛋糕有一个正整数的重量. 早上,糕点铺已经 ...

  8. 【编程笔试】美团2021校招笔试-通用编程题第3场(附思路及C++代码)

    导览 练习地址 小美的仓库整理 小美的跑腿代购 小美的用户名 小美的区域会议 总结 练习地址 点此前往练习 小美的仓库整理 小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的货物,每取出一件 ...

  9. 美团2021校招笔试-编程题(通用编程试题,第10场)

    import java.util.*;public class Main{public static void main(String[] args) {Scanner sc = new Scanne ...

最新文章

  1. CentOS7在防火墙开启与关闭以及端口操作
  2. HTML内嵌式CSS背景图填充满无截断重复
  3. Serverless Live | 9 大场景带你从零实践 Serverless
  4. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
  5. 会话跟踪之Session
  6. 前端学习(1058):面向对象介绍
  7. Github 简明教程 - 操作标签
  8. tensorflow之argmax与axis
  9. go - struct
  10. 94. autoload(2)
  11. tortoisegit pull 远程拉取代码,提示需要密码
  12. iOS数据持久化(二)SQLite
  13. 程序化炒股软件有哪些?
  14. Word2Vec模型详解
  15. SecKill——一款超级好用的抢单软件
  16. 云编程那些事1 - 把开发过程彻底云化
  17. 最适合程序员转行的10大职业
  18. Could not find acceptable representation 原因探究
  19. 项目经理面试题及答案
  20. python画图turtle花开_Python绘图之(5)turtle 画一朵花

热门文章

  1. adminLte解决iframe高度问题
  2. STM32F103VBT6 使用16M晶振和8M晶振 RCC设置有何不同?
  3. Win10怎么把磁盘格式化成exfat格式_使用命令格式化磁盘为exfat的方法
  4. n76e003引脚图_老司机带你入门新塘N76E003单片机
  5. C# 深入单例(回笼)
  6. java调用c 生成so,Java在linux下调用C/C++生成的so文件
  7. 【大学篇】大学的意义
  8. 推挽电路---采用二极管消除交越失真----克服交越失真的互补推挽输出电路图
  9. 京东 618:如何配合业务打造 JDReact 三端融合开发平台?
  10. 生活中不可缺少的日常小知识(转载)