【笔经】百度笔试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; }#百度笔试##百度##笔经#