美团8.6笔试思路-后端岗

  1. 礼盒包装

    给定a、b两种点心的数量,每个礼盒放3个点心,a、b至少各有一个,求最多能包多少个礼盒

  • 设2a1b礼盒有x个,2b1a礼盒有y个,线性规划问题:
    max (x+y) s.t. (2x+y ≤ a) && (x+2y ≤ b) && (x ≥ 0) && (y ≥ 0)
  • 根据 a b 关系,z = x+y = a或b或(a+b)/3
  1. 分割点k实验

    给定一组0,-1,+1数组,分割点k左大于等于0、右侧小于等于0的为异常数据,求最乐观情况下有多少个异常数据

  • 记录正数和负数的总数量pos neg
  • 遍历数组,记录当前位置左侧的负数数量curneg,更新ans = min(ans, curneg + (pos - curpos))
  1. 反转魔法石

    给定一组魔法石正面和反面表示的数字,只有当至少一半相同数字的面朝上可以触发法阵,初始状态为全部朝上,求最少需要翻转多少块石头可以触发法阵,无解输出-1

  • 根据初始状态朝上数字出现次数从大到小尝试翻转,如果可以触发则输出次数
  • 如果初始正面数字无法触发,则输出反面数字出现次数超过(n+1)/2的最小次数,如果没有则输出-1

至过了91%,可能哪里没有考虑全。测试用例比较弱,只考虑初始正面有超过一半的数字就输出0,否则输出-1就能过73%。

  1. 数据拆分

    给定n个样本的类别编号,输入的次序为样本编号,每类样本编号最小的(m+1)/2为训练集,剩下的为测试集。按照样本编号升序输出所有训练集样本及训练集样本

  • vector<vector<int> > ybz(k+1); //样本组:ybz[i]保存样本类别i的所有样本</int>
  • 根据ybz[i].size()拆分训练集和测试集
  • 对总测试集和总训练集排序,然后输出即可
  1. 字符串第k位

    将字符串s丢入机器后则输出新字符串s+reverse(s)+"wow"。初始字符串为"MeiTuan",不停的反复将新字符串丢入机器,求得到的无限长字符串的第k位字母(1 ≤ k ≤ 1e18)

  • 用long long数组保存每次丢入机器得到是字符串长度,分别为7 17 37 ...

  • 根据k的大小,找到k所属字符串是第几次丢入机器得到的字符串

  • 根据k与当前字符串长度的关系,判断该字母是上一字符串的第几个字母,直到k ≤ 7,输出字母即可

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    int main() {
      int T;
      cin >> T;
    
      string bases("MeiTuan");
      string wows("wow");
      vector<long long> lens = {7};
    
      while(true){
          if(lens.back() > 1e18)
              break;
          auto thislen = lens.back() * 2 + 3;
          lens.push_back(thislen);
      }   
    
      while(T--) {
          long long k;
          cin >> k;
    
          int idx;
          for(idx = 0; idx<lens.size(); ++idx) {
              if(k <= lens[idx])
                  continue;
          }
          idx -= 1;
    
          while(k > 7) {
              auto curlen = lens[idx];
    
              // 属于“wow”部分
              if(k > lens[idx-1] * 2) {
                  cout << wows[k-lens[idx-1]*2-1] << endl;
                  break;       
              }
    
              // 属于上一字符串逆序部分
              if(k > lens[idx-1]){
                  k = lens[idx-1] * 2 - k + 1;
              }
              // 遍历上一字符串
              idx--;
          }
    
          // 已经输出过了
          if(k > 7)
              continue;
          // 输出“MeiTuan”的第k位字母
          cout << bases[k-1] << endl;
      }
      return 0;
    }
#美团笔试#
全部评论
感谢分享,估计最近就能用到了
点赞 回复 分享
发布于 2022-08-07 22:56

相关推荐

2025-11-21 22:25
门头沟学院 HTML5
我是个没天赋的人,努力学习也只考上了个一本,家里条件也不怎么样。大一玩了一年,没怎么学技术,也没有卷绩点,全在游戏小说抖音中度过。大二上接触了牛客,看到了许多优秀的同龄人。很多双非的同学,甚至不少学院本的同学都进了大厂实习。我把他们作为榜样,决定好好学习。我每天都至少学八九个小时,很多次都想要放弃,想哭,我都坚持了下来。我总是告诉自己,只要努力,就一定能有好的结果。这几个月过的很累,但也很充实。转眼就到大二下了,我决定去找实习了,但是学校的认可度让我感到心底发凉,明明和广工这种知名双非分差不多,结果总被问是不是公办本科。两个月投了一千份实习,只有四个面试,最终去了个中小厂实习。结果就是改了两个月bug,虽然mt人挺好,但是实在学不了什么东西,所以就离职开始面试。凭借这段实习,确实多了不少中小厂面试,但是大厂依旧没有面试机会。除了字节腾讯所有大厂都投了,结果依旧是0面试。最终有幸获得美团的面试机会,面试也幸运的通过,然后入职了。为了省钱坐十几个小时硬座到北京,到北京的第一天,由于太激动想要租房,结果被坑了2600,之前实习的地方,房东也故意不退押金,加起来总共损失3000多。虽然很难过,但是我还是忍受了下来,我想着实习才刚开始,会好起来的。实习了大半个月,跟学校这边沟通一直不成功,我每天都寝食难安,精神都快崩溃了,经常凌晨两三点才睡着,想要跳楼。最后迫于无奈,我一大早我坐高铁回去,恳求院主任给我一个机会,我怎么恳求讲理都没用,甚至都磕头下跪了,还是没用。院主任一点机会都没给我,连让我跟各科老师沟通机会都不给,要不休学要不辞职。我没得选择,这段实习我看的比我的生命还重要,这不仅是我这大半年的心血,更是未来的一份希望。我只能休学,我想着现在好好实习,多学点技术,到时候秋招早点拿到offer,然后再补这学期的课也不是不行。但是,现实总是事与愿违。这三个月说实话并没有学到什么东西,前一个月很闲,这两个月事很多,每天基本都是九点后下班,但都是杂活。产出都是靠我看文档加上代码写上去的。我真的很想锻炼一下技术,但是总是不尽人意。三个月了,我到现在都还没做过一个像样点的需求。产出是能编,但有破绽不说还没锻炼到技术。我好想真正的做一下需求啊,我好想真正的走完一遍流程,去上线一次啊。接下来两个月,我不知道该怎么坚持下去了,现在每天都想哭,很焦虑,很难受。冒着将来可能延毕的风险,我赌上了一切,结果输的这么彻底,可能我就只是个小丑吧。如果家庭好点就不用卷了,如果我聪明一点就能上个好学校了,如果大一有人带我,我就不会摆烂了,如果院主任给我个机会,我就不用这么苦了,如果我实习能有机会好好锻炼自己,我就不用这么难受焦虑了。但是没办法,我又能怎么办呢,无非是咬紧牙关罢了,毕竟没人能够帮助我,只能靠自己我可真是个小丑啊
HasonoCell:你很棒了bro....其实我看网上休学一年的人很多的也都顺利毕业了,真的不用特别焦虑这个事。另外实习也是,有一段大厂实习已经比很多很多人厉害了,跟你一届的很多人现在估计都没意识到未来的压力呢,实习就算没产出也不用特别焦虑,好好总结一下已经做过的事情,然后趁着休学这年继续冲一下,要相信未来会有好结果的。你应该也挺眼熟我的,我之前字节横向挂的时候也是难过的不行,觉得自己好没用,结果百度出乎意料的offer了,很多事其实都很顺其自然,认真做事,好结果也许就在下个路口等着你。 很喜欢的一句话是:木已成舟。不要老是沉浸在过去的遗憾中无法自拔噢,要努力过好当下。 好好休息一下吧,辛苦了,你已经很棒了噢
点赞 评论 收藏
分享
评论
7
22
分享

创作者周榜

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