### 思路
1. **输入处理**:读取输入的`n`, `m`, `c`,以及每个串珠的颜色信息。
2. **颜色位置记录**:使用一个字典来记录每种颜色出现的位置。
3. **检查颜色分布**:遍历每种颜色,检查其在任意连续`m`个串珠中是否出现超过一次。
4. **环形处理**:由于手串是环形的,需要特别处理跨越首尾的情况。
5. **统计不符合要求的颜色**:统计不符合要求的颜色数量。
### 伪代码
```
function count_invalid_colors(n, m, c, beads):
color_positions = {}
for i from 0 to n-1:
for color in beads[i]:
if color not in color_positions:
color_positions[color] = []
color_positions[color].append(i)
invalid_colors_count = 0
for color, positions in color_positions.items():
if len(positions) <= 1:
continue
for i from 0 to len(positions)-1:
for j from i+1 to len(positions)-1:
if (positions[j] - positions[i] <= m) or (n - positions[j] + positions[i] <= m):
invalid_colors_count += 1
break
if invalid_colors_count > 0:
break
return invalid_colors_count
```
### C++代码
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int count_invalid_colors(int n, int m, int c, vector<vector<int>>& beads) {
map<int, vector<int>> color_positions;
// Record positions of each color
for (int i = 0; i < n; ++i) {
for (int color : beads[i]) {
color_positions[color].push_back(i);
}
}
int invalid_colors_count = 0;
// Check each color's positions
for (const auto& entry : color_positions) {
const vector<int>& positions = entry.second;
if (positions.size() <= 1) continue;
bool invalid = false;
for (size_t i = 0; i < positions.size(); ++i) {
for (size_t j = i + 1; j < positions.size(); ++j) {
if ((positions[j] - positions[i] <= m) || (n - positions[j] + positions[i] <= m)) {
invalid = true;
break;
}
}
if (invalid) break;
}
if (invalid) ++invalid_colors_count;
}
return invalid_colors_count;
}
int main() {
int n, m, c;
cin >> n >> m >> c;
vector<vector<int>> beads(n);
for (int i = 0; i < n; ++i) {
int num_colors;
cin >> num_colors;
beads[i].resize(num_colors);
for (int j = 0; j < num_colors; ++j) {
cin >> beads[i][j];
}
}
cout << count_invalid_colors(n, m, c, beads) << endl;
return 0;
}
### 总结
1. **输入处理**:读取并存储每个串珠的颜色信息。
2. **颜色位置记录**:使用字典记录每种颜色出现的位置。
3. **检查颜色分布**:遍历每种颜色,检查其在任意连续`m`个串珠中是否出现超过一次,特别处理环形情况。
4. **统计不符合要求的颜色**:统计并输出不符合要求的颜色数量。