【笔经】百度笔试9.7研发B卷

AC(%):100+100+80.
蹲一个AK帖~

1. 按比例放大二维数组

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

vector<vector<int>> func(vector<vector<int>>& vec, int n, int k) {
    vector<vector<int>> res(n*k, vector<int>(n*k));
    for(int i=0; i<n; ++i) {
        for(int j=0; j<n; ++j) {
            // vec[i][j]
            for(int k1=0; k1<k; ++k1) {
                for(int k2=0; k2<k; ++k2) {
                    res[i*k+k1][j*k+k2] = vec[i][j];
                }
            }
        }
    }
    return res;
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<vector<int>> vec(n, vector<int>(n));
    for(int i=0; i<n; ++i) {
        for(int j=0; j<n; ++j) {
            cin >> vec[i][j];
        }
    }
    vector<vector<int>> res = func(vec, n, k);
    for(int i=0; i<n*k; ++i) {
        for(int j=0; j<n*k; ++j) {
            cout << res[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

2. N的质因数组合数

#include <iostream>
using namespace std;

int func(int n) {
    int cnt = 0;
    for(int i=1; i*i<=n; ++i) {
        if(n % i) continue;
        int a = min(i, n/i), b = max(i, n/i);
        int flag = 1;
        for(int j=2; j<=a; ++j) {
            if(a%j==0 && b%j==0) {
                flag = 0;
                break;
            }
        }
        cnt += flag;
    }
    return cnt;
}

int main() {
    int t;
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        cout << func(n) << endl;
    }
    return 0;
}

3. 翻转字符串前缀使得字符串有序,求最少翻转次数

#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <unordered_set>
using namespace std;

int bfs(string& str) {
    string correct = str;
    sort(correct.begin(), correct.end());
    if(str == correct) return 0;

    int res = 0;
    queue<string> q;
    q.push(str);
    unordered_set<string> st;
    st.insert(str);
    while(!q.empty()) {
        int sz = q.size();
        for(int i=0; i<sz; ++i) {
            auto curr = q.front(); q.pop();
            for(int len=2; len<=str.size(); ++len) {
                string tmp = curr;
                reverse(tmp.begin(), tmp.begin()+len);
                if(st.count(tmp)) continue;
                if(tmp == correct) return res+1;
                q.push(tmp);
                st.insert(tmp);
            }
        }
        ++res;
    }
    return res;
}

int main() {
    int n, q;
    cin >> n >> q;
    while(q--) {
        string str;
        cin >> str;
        cout << bfs(str) << endl;
    }
    return 0;
}
#百度笔试##百度##笔经#
全部评论
第二题我也是这种暴力解法,只能通过4.7%
点赞 回复 分享
发布于 2021-09-08 11:44
100+100+76 第三题偷鸡的😂
点赞 回复 分享
发布于 2021-09-08 12:33
第二题我暴力只过了50😶
点赞 回复 分享
发布于 2021-09-08 19:30

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
2
16
分享
牛客网
牛客企业服务