美团劝退型笔试~

美团编程题(2018年9月6日)
第一题(提交之前没调出来,提交之后的5分钟内搞定了,应该是正确的吧~ 都怪前面的数学题和逻辑题占用了太多时间~)好气啊~ 美团劝退型笔试

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <sstream>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <numeric>
using namespace std;

using vv = vector<vector<int>>;
int helper(vv& g, vector<bool>& visited, int pos, int n){
    int res(0);
    visited[pos] = true;
    vector<int> s;
    for (auto& v : g[pos]){
        if (!visited[v]){
            s.push_back(helper(g, visited, v, n) + 1);
            visited[v] = true;
        }
    }
    if (s.size() == 0) return 0;
    sort(s.begin(), s.end());
    for (int i = 0; i < s.size() - 1; i++){
        res += 2 * s[i];
    }
    res += s.back();
    return res;
}
int main(){
    int n;
    cin >> n;
    vv g(n + 1);
    int u, v;
    for (int i = 0; i < n - 1; i++){
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<bool> visited(n + 1, false);
    int res = helper(g, visited, 1, n);
    cout << res << endl;
}

第二题比较简单(AC)。

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <sstream>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <numeric>
using namespace std;

int main(){
    int n, k;
    cin >> n >> k;
    vector<int> dp{ 0 };
    int num;
    for (int i = 1; i <= n; i++){
        cin >> num;
        if (num == 0) dp.push_back(i);
    }
    dp.push_back(n + 1);
    if (k >= dp.size() - 1){
        cout << n << endl;
        return 0;
    }
    int res(0);
    for (int i = k + 1; i < dp.size(); i++){
        res = max(res, dp[i] - dp[i - k - 1] - 1);
    }
    cout<<res<<endl;
    return 0;
}
#美团##笔试题目#
全部评论
大佬。。。。
点赞 回复 分享
发布于 2018-09-06 22:14
第一个题遍历:给的是一个生成树,找到最深深度的那条路线就可以了,最深深度的边只走一次,取余边走两次。大家看我博客,有示意图,很清楚: https://blog.csdn.net/anlian523/article/details/82495632
点赞 回复 分享
发布于 2018-09-07 14:53
大佬太强了,受我一拜。。。。
点赞 回复 分享
发布于 2018-09-06 22:12
第二个核心部分能解释一下吗,没看懂
点赞 回复 分享
发布于 2018-09-06 22:14
请问第一个代码是如何保证有的点可以重复走两次的呢? 比如样例中的数据
点赞 回复 分享
发布于 2018-09-07 00:17
dalao!
点赞 回复 分享
发布于 2018-09-07 00:26
第一题的思想可以简单的讲讲么?学java的,有点看不懂C,尴尬
点赞 回复 分享
发布于 2018-09-07 10:36
请问你的编程题目是什么,感觉好像跟我的不大一样
点赞 回复 分享
发布于 2018-09-07 12:01

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务