题目1 : 放置矩形
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
小Hi计划在笛卡尔平面中依次放置N个2x1的矩形(矩形的长是2,宽是1,长宽分别与XY轴平行)。其中第i个矩形的左下角预计放置在坐标(Xi, Yi)的位置上。
如果放置某一个矩形时,发现会与之前放置的矩形相交(公共面积大于0),就放弃放置当前矩形,继续尝试下一个矩形。
给定N个矩形的放置顺序,请你帮小Hi计算他一共能放下多少个矩形?
输入
第一行包含一个整数N。
以下N行包含N对整数Xi, Yi。
1 <= N <= 100000
0 <= Xi, Yi <= 1000000
输出
一个整数代表答案
样例输入
3 0 0 1 0 2 0
样例输出
2
import java.util.*;
import java.lang.*;
import java.text.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
Map<Integer, ArrayList<Integer>> map = new HashMap<>();
int ans = 0;
for (int i = 0; i < N; i++) {
int Xi = in.nextInt();
int Yi = in.nextInt();
ArrayList<Integer> arr1 = map.getOrDefault(Xi, new ArrayList<Integer>());
ArrayList<Integer> arr2 = map.getOrDefault(Xi + 1, new ArrayList<Integer>());
if (arr1.contains(Integer.valueOf(Yi)) || arr2.contains(Integer.valueOf(Yi))) {
continue;
}
ans++;
arr1.add(Yi);
arr2.add(Yi);
map.put(Xi, arr1);
map.put(Xi + 1, arr2);
}
System.out.println(ans);
}
}