CCF 201909-2 买菜
此类可以在坐标轴上讨论的题目(涉及时间、面积、染色啊之类的复杂计算时)最好是不要用一般的思考问题方式去细化问题分析不同类型的解决方案。可以把解决的范围放大,专注于坐标轴上,用boolean数组模拟时间坐标轴(时间唯一且最大限度题目已经给出),H停留的时间段标记数组为true,当再次读取W的停留时间时可直接分析时间数组此时H是否停留来计数。需要注意考虑坐标轴上开闭区间对计数的影响,主要还是看题目要求。上满分代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
int[] H = new int[2*num];
int[] W = new int[2*num];
boolean[] time = new boolean[1000000+1];
int count = 0;
for(int i=0 ; i<num ; i++) {
H[2*i]=scanner.nextInt();
H[2*i+1]=scanner.nextInt();
for(int j=H[2*i] ; j<H[2*i+1] ; j++) {
time[j] = true;
}
}
for(int i=0 ; i<num ; i++) {
W[2*i]=scanner.nextInt();
W[2*i+1]=scanner.nextInt();
for(int j=W[2*i] ; j<W[2*i+1] ; j++) {
if(time[j])count++;
}
}
scanner.close();
System.out.print(count);
}
}