用stack存储每一种颜色的出现的珠子编号。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//n m c
int[] s = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
HashMap<Integer, Stack<Integer>> map = new HashMap<>();
for(int i = 1; i <= s[2]; i++){
map.put(i, new Stack<>());
}
// System.out.println(map.keySet().toString());
for(int i = 0; i < s[0]; i++){//遍历每一个珠子
int[] temp = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
for(int j = 1; j < temp.length; j++){
map.get(temp[j]).add(i + 1);
}
}
int cnt = 0;
for(int i = 0; i < s[2]; i++){
int flag = 0;
Stack stack = map.get(i + 1);
int size = stack.size();
int pre = Integer.MAX_VALUE;
if(!stack.isEmpty()){
pre = (int) stack.pop();
}
int lastest = pre;//lastest最后一个
while (!stack.isEmpty()) {
if(pre - (int) stack.peek() < s[1]){
flag = 1;
break;
}
pre = (int) stack.pop();
}
//此时pre指向第一个
if(size > 2 && pre + s[0] - lastest > 0 && pre + s[0] - lastest < s[1]){
flag = 1;
}
cnt+=flag;
}
System.out.println(cnt);
}
}

京公网安备 11010502036488号