思路:
硬模拟,注意不要用for循环时间从1到T,会TLE。
AC代码:
import java.util.*;
public class Main {
static Map<Integer, List<Integer>> map = new HashMap<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int T = sc.nextInt();
for(int i = 0; i < m; i ++ ) {
int a = sc.nextInt();
int id = sc.nextInt();
if(!map.containsKey(id))
map.put(id, new ArrayList<>());
map.get(id).add(a);
}
int res = 0;
for(Integer id : map.keySet()) {
List<Integer> cur = map.get(id);
cur.add(0);
Collections.sort(cur);
int len = cur.size();
int value = 0;
boolean is = false;
for(int i = 1; i < len; i ++ ) {
int nap = Math.max(0, cur.get(i) - cur.get(i - 1) - 1);
value = Math.max(0, value - nap);
if(is && value <= 3) is = false;
value += 2;
if(value > 5) is = true;
}
if(is) {
int nap = T - cur.get(len - 1);
if(value - nap > 3) res ++ ;
}
}
System.out.println(res);
}
}