百度笔试
哈哈哈哈,编程题第一题a了,被实验室小伙伴一顿夸,有点飘了,去卫生间都是跳着去的🤣~回来记录一下
第一题是n个长度为m的字符串,任意两个字符串i和j,交换其前k个字符,可以将交换后的字符串重复这个操作,问共有多少种字符串,结果对1000000007取余。大概是这个意思~
int main() { int n, m; cin >> n >> m; vector<string> data(n); for (int i = 0; i < n; i++)//输入数据 { cin >> data[i]; } vector<int> count(n);//保存每个位上字符出现的个数 for (int i = 0; i < m; i++) { unordered_map<char, int> map; for (int j = 0; j < n; j++) { if (map.find(data[j][i]) == map.end()) { map[data[j][i]]++; } } count[i] = map.size(); } long res = 1; for (int i = 0; i < m; i++)//结果相乘 { res = res % 1000000007; res *= count[i]; } cout << res % 1000000007; return 0; }第二题1-n的一个排列p1-pn,组成的无向连通图中 若i和j有边相连,对应pi和pj也有边相连,输出Yes,否则输出No,比较坑的是每次可能有多个测试用例😑
投机取巧了,方法可能不对,但是通过了18%
int main() { int t; cin >> t; for (int k = 0; k < t; k++) { int n; cin >> n; vector<int> data(n); vector<int> temp(n); for (int i = 0; i < n; i++) { cin >> data[i]; temp[i] = i + 1; } bool tmp = true; for (int i = 0; i < n; i++) { int num = data[i]; swap(data[i], data[num]); if (data[i] != i + 1) { cout << "No" << endl; temp = false; break; } } if (tmp) { cout << "Yes" << endl; } } return 0; }可是选择和那个什么问答还有系统设计答得不好,就怕后面没时间写编程,前面就嗖嗖的写,我太难了