这个问题可以使用类似的方法在C++中解决。我们将使用一个向量来存储每个珠子的颜色,并使用两个数组来跟踪每种颜色的最后出现位置以及哪种颜色是无效的。以下是C++解决方案:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m, c;
cin >> n >> m >> c;
vector<vector<int>> beads(n);
vector<int> last_occurrence(c + 1, -1), invalid(c + 1, 0);
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
beads[i].resize(num);
for (int j = 0; j < num; ++j) {
cin >> beads[i][j];
}
}
for (int i = 0; i < n; ++i) {
for (int color : beads[i]) {
if (last_occurrence[color] != -1 && i - last_occurrence[color] < m) {
invalid[color] = 1;
}
last_occurrence[color] = i;
}
}
for (int i = 0; i < m; ++i) {
for (int color : beads[i]) {
if (last_occurrence[color] != -1 && i + n - last_occurrence[color] < m) {
invalid[color] = 1;
}
}
}
cout << count(invalid.begin(), invalid.end(), 1) << endl;
return 0;
}
这段代码首先读取输入并初始化`invalid`和`last_occurrence`向量。然后它遍历珠子,对于每种颜色,它检查是否在最后`m`个珠子中出现过。如果出现过,它将颜色标记为无效。最后,它打印无效颜色的数量,这是不符合要求的颜色数量。