美团笔试8.17

  • 1. 预处理每个数的最小质因子,若没有最小质因子则为质数输出本身,否则输出最小质因子。
#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int ans[N];
void solve()
{
  for (int i = 3; i <= 1e5; i++)
  {
    for (int j = 3; j * j <= i; j++)
    {
      if (i % j == 0)
      {
        ans[i] = j;
        break;
      }
    }
  }
}
int main()
{
  solve();
  int t;
  cin >> t;
  while (t--)
  {
    int x;
    cin >> x;
    if (x & 1)
    {
      cout << (ans[x] ? ans[x] : x) << endl;
    }
    else
    {
      cout << 2 << endl;
    }
  }
}
// 64 位输出请用 printf("%lld")
  • 2. 由于数组总和不变,要让极差最小,最后极差必然是1,最后有sum%n个x+1和n-(sum%n)个x,按大小顺序依次赋值即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
#define int long long
int a[N];
signed main()
{
  int s = 0;
  int n;
  cin >> n;
  map<int, int> mp;
  for (int i = 1; i <= n; i++)
  {
    cin >> a[i];
    s += a[i];
    mp[a[i]]++;
  }
  int val = s / n;
  int y = s % n;
  int x = n - y;
  // cout<<x<<" "<<y<<endl;
  sort(a + 1, a + 1 + n);
  int m1 = 0, m2 = 0;
  for (int i = 1; i <= n; i++)
  {
    if (i <= x)
    {
      if (a[i] >= val)
        m1 += a[i] - val;
      else
        m2 += val - a[i];
    }
    else
    {
      if (a[i] >= val + 1)
        m1 += a[i] - val - 1;
      else
        m2 += val + 1 - a[i];
    }
  }
  cout << min(m1, m2);
}
  • 重点是先手要怎么乘,使得后手不会占到便宜,后手肯定选子序列最小/最大的区间,这里太菜了没想明白,感觉是dp,求大佬解答

upd:问了大佬指点会做了,实习两个月整个人都变菜了

由于先手不会让后手占便宜,选的区间肯定不会让后手也能够拿来用更优,所以两个人选的区间没交集。先预处理pre_max[i]表示到i前缀的子序列最大值,pre_min[i]表示1-i前缀的子序列最小值,后缀同理,枚举先手选的区间[i,j],后手选的是[1,i-1]的最小/最大 和 [j+1,n]的最小/最大,两者取min/max 取最小或最大由k的正负性决定

upd 经过评论区大佬们指正 做法还是有问题  等一个题解

#实习##笔试##秋招##美团#
全部评论
不用啊,第2题先求平均数,然后四舍五入。大于平均数的差值统计为num1,小于平均数的差值统计为num2,然后返回他俩的最小值就行了
4 回复 分享
发布于 2024-08-17 20:35 江苏
感谢分享题目
3 回复 分享
发布于 2024-08-17 21:38 黑龙江
你好,第三题 -100000 1 -100000,k=2,先手选区间[2,2]乘2,后手选区间[1,3]乘2,这样不是有交集么。还是我理解有问题?
1 回复 分享
发布于 2024-08-18 00:08 湖南
第一题说是输出其中一个正确的就行,但是一提交就是10-
1 回复 分享
发布于 2024-08-17 21:06 陕西
原数组相邻正负的数直接合并的话,最后数组只会是正负正负正负,那么第一个人枚举的点肯定是两个正,那直接枚举第一个人的范围的话,差不读是500*500/2,对这个区间的起点到整个数组的最后直接暴力处理一下,前半部分可以预处理出来,感觉卡卡能过?不知道对不对
点赞 回复 分享
发布于 2024-08-18 20:33 广东
第三题区间dp,ak了
点赞 回复 分享
发布于 2024-08-18 16:02 陕西
第三题可以看看我置顶,但是应该不是正解
点赞 回复 分享
发布于 2024-08-18 11:34 北京
第三题,没看懂。有大佬指点一下吗?
点赞 回复 分享
发布于 2024-08-18 00:00 北京
t3有说两个区间不能相交吗
点赞 回复 分享
发布于 2024-08-17 23:52 浙江
我觉得先手在k小于0时需要考虑后手,需要将总和趋近于0
点赞 回复 分享
发布于 2024-08-17 22:00 北京
话说考试还没结束,还有人没交卷就把答案发出来真的没问题吗
点赞 回复 分享
发布于 2024-08-17 20:53 辽宁
大佬第二题没看懂,能再讲讲不
点赞 回复 分享
发布于 2024-08-17 20:36 江苏

相关推荐

最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
13
28
分享

创作者周榜

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