20200905秋招搜狗C++后台笔试题(3t 90min)

第一题:
class Solution {
    using ll = long long;
public:
    int numberofprize(int a, int b, int c) {
        ll x = a;
        ll y = b;
        ll z = c;
        ll cnt = 0;
        if(x < y) swap(x, y);
        if(x < z) swap(x, z);
        if(y < z) swap(y, z);
        
        cnt += z;
        x -= z;
        y -= z;

        if(y == 0) {
            return cnt + x / 5;
        }
        return cnt + (x + y) / 4;
    }
};

第二题:
class Solution {
    const double eps = 1e-6;
    using pdd = pair<double, double>;
public:
    int getHouses(int t, int* xa, int xaLen) {
        vector<pdd> arr(xaLen / 2);
        int n = arr.size();
        if(n == 0) return 0;
        if(n == 1) return 2;
        for(int i = 0, t = 0; i < xaLen; i += 2) {
            arr[t].first = xa[i] - (xa[i+1] / 2.0);
            arr[t++].second = xa[i] + (xa[i+1] / 2.0);
        }
        set<double> pos;
        pos.insert(arr[0].first);
        for(int i = 1; i < n; ++i) {
            double dx = arr[i].first - arr[i-1].second;
            if(dx < t) continue;
            if(dx - t <= eps) {
                pos.insert(arr[i].first);
            } else {
                pos.insert(arr[i-1].second);
                pos.insert(arr[i].first);
            }
        }
        pos.insert(arr[n-1].second);
        return pos.size();
    }
};

第三题:
class Solution {
    using ll = long long;
public:
    long long getPasswordCount(string password) {
        set<string> ans;
        if(password.size() <= 1) return 9;
        for(int i = 0; i < 10; ++i) {
            string path = to_string('0' + i);
            dfs(password, 1, path, ans);
        }
        if(ans.count(password)) return ans.size()-1;
        return ans.size();
    }
    void dfs(string& s, int left, string p, set<string>& ans) {
        if(left >= s.size()) {
            ans.insert(p);
            return;
        }

        int val = (p.back() - '0') + (s[left] - '0');
        char ch = ('0' + val/2);

        if(val&0x1) {
            p.push_back(ch);
            dfs(s, left+1, p, ans);
            p.pop_back();

            ch++;
            p.push_back(ch);
            dfs(s, left+1, p, ans);
            p.pop_back();
        } else {
            p.push_back(ch);
            dfs(s, left+1, p, ans);
            p.pop_back();
        }
    }
};

#笔试题目##搜狗#
全部评论
厉害
点赞 回复 分享
发布于 2020-09-05 21:38
第一题 (x+y)/4 这是啥了
点赞 回复 分享
发布于 2020-09-05 22:46
第三题ac了吗
点赞 回复 分享
发布于 2020-09-06 19:47

相关推荐

头像
11-10 15:58
东北大学 Java
当时脑抽投了个数开
过关斩将结果败给排序:《卓越表现》
投递美团等公司10个岗位 > 你都收到了哪些公司的感谢信?
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
2 4 评论
分享
牛客网
牛客企业服务