在本教程中,我们将学习如何在不伤害任何人的情况下为k个学生分配n个球。
这个想法很简单,我们有n个不同颜色的球需要分发给学生。我们不必给任何一个学生一个以上相同颜色的球。如果学生有可能获得多个同色的球,则不应进行分配。
让我们来看一个例子。
输入
n = 10 k = 5 ballsColors = "rrrgbrbgbr"
输出
Yes
颜色不超过学生人数(k)。因此,没有一个学生会得到超过一个相同颜色的球。
让我们看看解决问题的步骤。
初始化n,k和ball颜色。
初始化映射以存储球的颜色计数。
遍历球的颜色并找到每种球颜色的计数。
现在,遍历每个球的计数。
如果任何一个球的颜色大于学生人数,则无法分发。
否则,我们可以分发球了。
打印结果。
让我们看一下代码。
#include <bits/stdc++.h>
using namespace std;
bool canDistributeBalls(string ballsColors, int n, int k) {
map<char, int> charCount;
for (int i = 0; i < n; i++) {
charCount[ballsColors[i]]++;
}
map<char , int >::iterator itr;
for(itr = charCount.begin(); itr != charCount.end(); itr++) {
if (itr->second > k) {
return false;
}
}
return true;
}
int main() {
int n = 10, k = 5;
string ballsColors = "rrrgbrbgbr";
if (canDistributeBalls(ballsColors, n, k)) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
return 0;
}输出结果如果运行上述程序,则会得到以下结果。
Yes