输入数据之后,对每种颜色所在的行数进行遍历,判断是否满足条件,尤其是注意首尾相连的判定:
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
int main(){
int n, m, c;
cin >> n >> m >> c;
unordered_map<int, vector<int>> map;//<颜色,所在的珠子的序号数组>
for (int i = 1; i <= n; ++i){
int cnt;
cin >> cnt;
if (cnt == 0) continue;
int color;
for (int j = 0; j < cnt; ++j){
cin >> color;
map[color].push_back(i);
}
}
int res = 0;
for (int i = 1; i <= c; ++i){//考虑每一种颜色
auto &vec = map[i];
for (int j = 1; j < vec.size(); ++j){
if (vec[j] - vec[j - 1] < m){//不满足条件
++res;break;
}
if (j == vec.size()-1 && vec[0] + n - vec[j] < m)//结尾与开头的判断
++res;
}
}
cout << res << endl;
return 0;
}