百度笔试
哈哈哈哈,编程题第一题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;
} 可是选择和那个什么问答还有系统设计答得不好,就怕后面没时间写编程,前面就嗖嗖的写,我太难了
查看10道真题和解析
