腾讯笔试-04-24

第一题 -- ac
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <unordered_map>
#include <unordered_set>

bool cmp(std::string &a, std::string &b) {
    if (a.size() != b.size()) {
        return a.size() < b.size();
    }

    return a < b;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n, m;
    std::cin >> n; 

    std::vector<std::string> b(n);
    for (int i = 0; i < n; i++) {
        std::cin >> b[i];
        m = b[i].size();
    }

    std::vector<std::string> v(m);
    for (int i = 0; i < m; i++) {
        std::string temp;
        bool ok = false;
        for (int j = 0; j < n; j++) {
            if (b[j][i] != '0') {
                ok = true;
            }
            if (ok) {
                temp += b[j][i];
            }
        }
        if (temp.size() == 0) {
            temp = "0";
        }
        v[i] = temp;
    }

    std::sort(v.begin(), v.end(), cmp);
    for (const auto &x : v) {
        std::cout << x << " ";
    }
    std::cout << "\n";

    return 0;
}
第二题 -- ac
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <unordered_map>
#include <unordered_set>

const int MAX_N = 200010;

int primes[MAX_N], vis[MAX_N], cnt;

void init() {
    vis[1] = true;
    for (int i = 2; i < MAX_N; i++) {
        if (!vis[i]) {
            primes[cnt++] = i;
        }
        for (int j = 0; j < cnt && primes[j] * i < MAX_N; j++) {
            vis[primes[j] * i] = 1;
            if (i % primes[j] == 0) {
                break ;
            }
        }
    }
}

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param a int整型vector 
     * @return int整型
     */
    int getNumber(std::vector<int>& a) {
        // write code here
        init();


        while (true) {
            if (a.size() == 1) {
                break ;
            }
            std::vector<int> now;
            for (int i = 1; i <= a.size(); i++) {
                //std::cout << i << " " << vis[i] << "\n";
                if (!vis[i]) {
                    now.emplace_back(a[i - 1]);
                }
            }
            a = now;
        }


        return a[0];
    }
};

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    Solution s;
    std::vector<int> v{3, 1, 1, 4, 5, 6};
    std::cout << s.getNumber(v) << "\n";

    return 0;
}
第三题 -- ac
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <unordered_map>
#include <unordered_set>

const long long INF = 0x3f3f3f3f3f3f3f3f;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;
    std::cin >> n;

    std::string t;
    std::cin >> t;

    std::vector<long long> s1(n + 1), s0(n + 1);
    for (int i = 1; i <= t.size(); i++) {
        s1[i] = s1[i - 1];
        s0[i] = s0[i - 1];
        if (t[i - 1] == '1') {
            s1[i] += i;
        } else {
            s0[i] += i;
        }
    }

    long long ans = INF;
    ans = std::min(ans, s1[n]);
    for (int i = 1; i <= n; i++) {
        long long left = s0[i];
        long long right = s1[n] - s1[i];
        long long temp;
        if (left - right < 0) {
            temp = right - left;
        } else {
            temp = left - right;
        }
        ans = std::min(ans, temp);
    }

    std::cout << ans << "\n";

    return 0;
}
第四题 -- ac
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <unordered_map>
#include <unordered_set>

struct ListNode {
    int val;
    struct ListNode *next;

    ListNode(int x) : val(x), next(nullptr) {}
};

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */

const int INF = 0x3f3f3f3f;

class Solution {
public:
    bool cmp(ListNode *l1, ListNode *l2) {
        for (auto i = l1, j = l2; i; i = i->next, j = j->next) {
            if (i->val < j->val) {
                return true;
            }
        }
        return false;
    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param a ListNode类vector 指向每段碎片的开头
     * @return ListNode类
     */
    ListNode* solve(std::vector<ListNode*>& a) {
        // write code here
        if (a.empty()) {
            return nullptr;
        }

        std::unordered_map<int, int> pre;
        for (auto l : a) {
            auto last = l->val;
            l = l->next;
            while (l) {
                pre[l->val] = last;
                last = l->val;
                l = l->next;
            }
        }

        std::unordered_map<int, ListNode*> dict;
        for (const auto &it : pre) {
            dict[it.first] = new ListNode(it.first);
        }

        auto res = new ListNode(-1);
        auto ans = res;
        int minVal = INF;
        ListNode* begin = nullptr;

        for (const auto &it : dict) {
            if (it.first < minVal) {
                minVal = it.first;
                begin = it.second;
            }
        }

        for (const auto &it : pre) {
            dict[it.second]->next = dict[it.first];
        }

        auto cur = begin;
        res->next = new ListNode(cur->val);
        res = res->next;
        cur = cur->next;

        while (cur->val != minVal && cur) {
            res->next = new ListNode(cur->val);
            res = res->next;
            cur = cur->next;
        }

        // 逆时针
        std::unordered_map<int, int> pre1;
        for (auto l : a) {
            auto last = l->val;
            l = l->next;
            while (l) {
                pre1[last] = l->val;
                last = l->val;
                l = l->next;
            }
        }

        std::unordered_map<int, ListNode*> dict1;
        for (const auto &it : pre1) {
            dict1[it.first] = new ListNode(it.first);
        }

        auto res1 = new ListNode(-1);
        auto ans1 = res1;
        minVal = INF;
        ListNode* begin1 = nullptr;

        for (const auto &it : dict1) {
            if (it.first < minVal) {
                minVal = it.first;
                begin1 = it.second;
            }
        }

        for (const auto &it : pre1) {
            dict1[it.second]->next = dict1[it.first];
        }

        auto cur1 = begin1;
        res1->next = new ListNode(cur1->val);
        res1 = res1->next;
        cur1 = cur1->next;

        while (cur1->val != minVal && cur1) {
            res1->next = new ListNode(cur1->val);
            res1 = res1->next;
            cur1 = cur1->next;
        }
        
        //return ans1->next;
        
        auto l1 = ans->next, l2 = ans1->next;
        while (l1) {
            if (l1->val < l2->val) {
                return ans->next;
            } else if (l1->val > l2->val) {
                return ans1->next;
            }
            l1 = l1->next;
            l2 = l2->next;
        }

        return ans->next;
    }
};

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    return 0;
}
第五题 -- 60%
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <array>

int n, m;
long long ans;

void dfs(int u, long long sum, std::vector<int> &v, int left) {
    if (u == n) {
        ans = std::max(ans, sum + 1ll * left * v[n - 1]);
        return ;
    }

    dfs(u + 1, sum, v, left);
    if (sum >= v[u]) {
        dfs(u + 1, sum - v[u], v, left + 1);
    }
    if (left) {
        dfs(u + 1, sum + v[u], v, left - 1);
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> n >> m;

    std::vector<int> v(n);
    for (int i = 0; i < n; i++) {
        std::cin >> v[i];
    }

    ans = m;
    dfs(0, m, v, 0);

    std::cout << ans << "\n";

    return 0;
}
第四题调的时间太长了,第五题没时间想了,直接暴力搞了 60%




#腾讯笔试##腾讯#
全部评论
第四题就摁连都可以🤨,真的无语,我还以为有那种多个链表不相交的情况
点赞 回复 分享
发布于 2022-04-25 06:48
为什么楼主不用namespace std呢🤣一个一个打不累吗
点赞 回复 分享
发布于 2022-04-25 16:06

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
5
11
分享
牛客网
牛客企业服务