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