2023.8.10 Zoom 秋招 C++ 开发笔试题

第一题

背景是树,本质是图的题目,根据条件建立图以后,用 DFS 或者 BFS 遍历即可

#include <bits/stdc++.h>
using namespace std;

struct Node {
    int val;
    int blue;
    int red;
    Node(int v, int b, int r) : val(v), blue(b), red(r) {}
};

int main() {
    int n, a, b, r;
    string s;
    cin >> n >> s;
    vector<vector<int>> graph(n + 1);
    for (int i = 1; i < n; ++i) {
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    long ans = 0;
    unordered_set<int> visit;
    queue<Node> q;
    b = s[0] == 'B';
    q.emplace(1, b, 1 - b);
    visit.insert(1);
    while (not q.empty()) {
        auto t = q.front();
        q.pop();
        ans += abs(t.blue - t.red);
        for (int i : graph[t.val]) {
            if (not visit.count(i)) {
                b = s[i - 1] == 'B' ? 1 : 0;
                r = 1 - b;
                q.emplace(i, t.blue + b, t.red + r);
            } else
                visit.insert(t.val);
        }
    }
    cout << ans;
}

第二题

并查集,提示数组越界,只过了80%,有点急事只能提前交卷了

#include <bits/stdc++.h>
using namespace std;

vector<int> ufs(10005);
void init() {
    iota(ufs.begin(), ufs.end(), 0);
}
int findRoot(int x) {
    return ufs[x] == x ? x : ufs[x] = findRoot(ufs[x]);
}
void unionSets(int a, int b) {
    ufs[findRoot(a)] = findRoot(b);
}

int main() {
    init();
    int q, n, c, m = 0;
    string s, name;
    unordered_map<string, vector<int>> user;
    unordered_map<string, int> stock;
    cin >> q;
    while (q--) {
        cin >> c;
        if (c == 1) {
            cin >> name >> n;
            for (int i = 0; i < n; ++i) {
                cin >> s;
                if (not stock.count(s))
                    stock[s] = m++;
                user[name].push_back(stock[s]);
                if (i > 0)
                    unionSets(stock[s], user[name][0]);
            }
        } else {
            cin >> name;
            if (not user.count(name)) {
                cout << "error" << endl;
                continue;
            } else {
                int root = findRoot(user[name][0]);
                int num = 0;
                for (int i = 0; i < m; ++i) {
                    if (findRoot(i) == root)
                        ++num;
                }
                cout << num - user[name].size() << endl;
            }
        }
    }
}
#Zoom##笔试##ZOOM笔试##做完zoom2023秋招笔试,人麻了#
全部评论
对,我第二题一开始也是80,开数组开成100010就不会越界了
点赞 回复 分享
发布于 2022-08-10 22:21
太强了大佬,我是沙壁
点赞 回复 分享
发布于 2022-08-10 21:35
厉害,我思路相似,但没写对
点赞 回复 分享
发布于 2022-08-10 21:22

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概&nbsp;4&nbsp;月份找好路线&nbsp;零基础&nbsp;开始学&nbsp;5&nbsp;月背八股和开始刷算法很难受&nbsp;7-8&nbsp;月焦虑躯体化害怕找不到实习&nbsp;9&nbsp;月找到一家像样的小厂去实习了&nbsp;4&nbsp;个月大三上期末考试结束之后&nbsp;1&nbsp;月份回来边实习边准备工作压力很大&nbsp;当时只有字节、百度、商汤的面试,字节三面挂了,百度&nbsp;oc,商汤&nbsp;二面挂(差评&nbsp;无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候&nbsp;mt&nbsp;交给我一个特别重要的工作数据库迁移(特别感谢&nbsp;mt&nbsp;,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而&nbsp;5&nbsp;月并没有涨),就想着留在百度吧也懒得面试了,4&nbsp;月&nbsp;20&nbsp;多的时候字节&nbsp;hr&nbsp;打电话约面问我要不要尝试一下询问了&nbsp;1&nbsp;月份三面为啥会挂有没有学习&nbsp;ai&nbsp;知识(因为字节这边后端岗位偏&nbsp;ai),我来到百度之后全面拥抱&nbsp;AI&nbsp;也认识了我的好兄弟&nbsp;X&nbsp;哥,他在百度&nbsp;XX&nbsp;部门&nbsp;Agent&nbsp;实习,他属于是我&nbsp;Agent&nbsp;的启蒙老师,来百度之后一直在了解&nbsp;AI&nbsp;这一块,我就接受了字节的面试,一面的时候&nbsp;20&nbsp;分钟实习拷打然后突然说&nbsp;30&nbsp;分钟代码考核我心就凉了以为是&nbsp;kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整&nbsp;80&nbsp;多行代码最后也写出来了,但是从来没看到过出这种题能&nbsp;oc&nbsp;的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps&nbsp;图二纯感慨&nbsp;(觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
评论
6
21
分享

创作者周榜

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