美团4.4笔试题解

早起做了一个小时,除了第二题没得全分(后来发现是没有特殊考虑没有切精度的情况,***了),其他都ac了。

第一题

脑经急转弯,统计出每个字符出现次数,答案就是各个字符出现次数+1的累乘。注意每一步都要取模,且中间过程可能会爆int,最后用long long存,不然需要对中间过程强转一下,代码如下:

#include <iostream>
using namespace std;

const int MOD = 20210101;
int num[26];
int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    string s; cin >> s;
    for(char c: s) num[c - 'a'] ++ ;
    long long res = 1;
    for(int i = 0; i < 26; i ++ ){
        res = res * (num[i] + 1) % MOD;
    }
    cout << res << endl;
    return 0;
}

第二题

没得全分就不贴代码了。。。

第三题

暴力即可,找出每个数的所有约数,这个计算时间复杂度为,总共有20w个数,每个数最大为2w,故最多计算2000w+次,可以过。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    int n, k; cin >> n >> k;
    string t = to_string(k);
    int res = 0;
    for(int i = 0; i < n; i ++ ){
        int a; cin >> a;
        vector<int> f;
        for(int j = 1; j * j <= a; j ++ ){
            if(a % j == 0){
                f.push_back(j);
                if(a / j != j) f.push_back(a / j);
            }
        }
        sort(f.begin(), f.end());
        string s;
        for(int num: f) s += to_string(num);

        int index = s.find(t);
        if(index >= 0 && index < s.size()) res ++ ;
    }
    cout << res << endl;
    return 0;
}

第四题

简单dp,用记忆化搜索写起来更简单,因为数据量只有50,无需优化,写了个的dfs,如下:dfs(x,y)表示从1跳到g[x][y]对应的数字最少花费是多少,显然dfs(x,y)=min(dfs(i,j)+abs(x-i)+abs(y-j)),(i,j)满足(g[i][j]+1=g[x][y])

#include <iostream>
#include <set>
#include <cstring>
using namespace std;

const int N = 55;
int g[N][N];
int dp[N][N];
int n, k; 
void dfs(int x, int y){
    if(dp[x][y] != -1) return;
    if(g[x][y] == 1) {
        dp[x][y] = 0;
        return;
    }
    int t = g[x][y] - 1;
    int ret = 1e9;
    for(int i = 1; i <= n; i ++ )
        for(int j = 1; j <= n; j ++ ){
            if(g[i][j] == t){
                int d = max(x - i, i - x) + max(y - j, j - y);
                dfs(i, j);
                ret = min(ret, dp[i][j] + d);
            }
        }
    dp[x][y] = ret;
}
int main(int argc, char const *argv[])
{
    cin >> n >> k;
    set<int> st;
    for(int i = 1; i <= n; i ++ )
        for(int j = 1; j <= n; j ++ ){
            cin >> g[i][j];
            if(g[i][j] >= 1 && g[i][j] <= k)
                st.insert(g[i][j]);
        }
    if(st.size() != k){
        cout << -1 << endl;
        return 0;
    }
    int res = 1e9;
    for(int i = 1; i <= n; i ++ )
        for(int j = 1; j <= n; j ++ ){
            if(g[i][j] == k) {
                memset(dp, -1, sizeof dp);
                dfs(i, j);
                res = min(res, dp[i][j]);
            }
        }
    cout << res << endl;
    return 0;
}

专项题

这个没啥说的,求一个数组前k项,这k项之和最大,前缀和即可:

#include <iostream>
using namespace std;

const int N = 200001;
int a[N], b[N];
int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    int m, n; cin >> m >> n;
    int res = 0, t1 = 0, t2 = 0;
    for(int i = 0; i < m; i ++ ){
        int x; cin >> x;
        a[i + 1] = a[i] + x;
        t1 = max(t1, a[i + 1]);
    }
    for(int i = 0; i < n; i ++ ){
        int x; cin >> x;
        b[i + 1] = b[i] + x;
        t2 = max(t2, b[i + 1]);
    }
    res = t1 + t2;
    cout << res << endl;
    return 0;
}
#笔试题目##美团#
全部评论
我只a了第二道题.... #include <bits/stdc++.h> using namespace std; int main(){     int n,ans=0,t,x,y=1,z=1;     scanf("%d",&n);     while (n--)     {         scanf("%d%d",&t,&x);         if(t==1){             if(z==1)z+=1;             else z+=2;         }else{             y++;         }     }     printf("%d\n",z*y); }
2 回复 分享
发布于 2021-04-04 15:13
第四题补一个Java版的,返回-1的情况太简单,就暂时忽略掉 https://www.nowcoder.com/discuss/632547
1 回复 分享
发布于 2021-04-05 21:49
大佬好强,我就A了第三题~
1 回复 分享
发布于 2021-04-05 12:19
我能说我菜到直接关闭网页吗😭😭😭
1 回复 分享
发布于 2021-04-04 22:29
确实,那个切蛋糕真怪异
1 回复 分享
发布于 2021-04-04 19:17
第一题 太难发现了。感觉有点像找规律,一直当子串去找。。。 浪费了太多时间  导致第二第三题都只过了55 第四题没写 第五题ac了
1 回复 分享
发布于 2021-04-04 14:52
我的第三题 找约数循环条件设错了不然也A4题了😂 大佬报的什么岗位呀
点赞 回复 分享
发布于 2021-04-07 21:46
大佬,求告知算法怎么刷,求点经验
点赞 回复 分享
发布于 2021-04-04 23:51
有没有投测试的,为啥附加题里面代码是写好的,我进去点了下确定直接通过了!
点赞 回复 分享
发布于 2021-04-04 22:40
专项题有对应的leetcode吗?
点赞 回复 分享
发布于 2021-04-04 19:31
怎么样才能像你一样强😥我就第一道和第二道a了9%
点赞 回复 分享
发布于 2021-04-04 12:39

相关推荐

(黑话警告⚠️:hc=岗位数量,&nbsp;mt=导师,&nbsp;ld=直属领导,&nbsp;cr=代码审查)25年1月,我加入了字节某前端团队,并期望能在这里待到秋招并尝试转正。然而,就在上周,ld&nbsp;找我1v1,告诉我,我的能力和团队预期不太匹配,并和我劝退。晴天霹雳吗?肯定是有的。那一刻,脑子里嗡嗡作响,各种情绪翻涌。但冷静下来想想,这几个月,自己在能掌控的范围内,确实有不少地方做得不尽如人意。所以,我想把这段不算成功的经历复盘一下,希望能给同样在努力转正的你提个醒,避开我踩过的坑。一、ld&nbsp;的要求要注意刚进组时,ld就和我聊过转正的事。我当时发问:“咱们这儿有hc&nbsp;吗?”&nbsp;ld没直接回答,只是说:“看能力,能力到了...
牛客上的彭于晏:过来人告诉你,入职后要做的第一件事儿不是说主动找活儿做,你要先学会融入团队,摸清ld的性格,投其所好。然后才是展示你的能力,能力上可以说技术或者业务,以业务能力为主,技术能力为辅。优先保证自己对业务需求的开发保证质量效率,然后再谈技术的问题,不要你觉得啥啥啥不行就想着整体优化了(发现校招生最喜欢干这事儿),我工作快5年了发现搞这种的最后都没啥好的结果,产出没有还引入新的bug,校招或者实习的水平看到的问题别人看不到嘛?为什么别人不去搞?浪费时间还没收益的事儿不要去做,技术上的能力体现在对于一个新需求,在不符合现在业务发展的架构设计上,你能拿出好的技术方案同时能考虑到后续业务发展逐渐将技术架构引入合理的架构,这是一个漫长的过程而不是一次性的
点赞 评论 收藏
分享
在秋招的小白菜很想养修勾:一眼 苍穹外卖+谷粒商城,项目换一换吧,可以找一些付费知识星球博主带带,避免烂大街。多投投大厂,背背八股,你这学历乱杀了,等实习经验到位,到时候大厂闭眼选
投递美团等公司8个岗位
点赞 评论 收藏
分享
评论
25
55
分享

创作者周榜

更多
牛客网
牛客企业服务