使用List存储的窗口对象,越顶层的窗口下标越大,所以每次都从后往前遍历list,发现点击的点在某个窗口就可以break啦,遍历完发现没有点击点没有在任何窗口内就输出IGNORED啦,需要注意的就是获取到焦点的窗口需要被提到list的末端。
奉上java满分代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static class Dialog{
public int sx;
public int sy;
public int ex;
public int ey;
public int index;
public Dialog(int sx, int sy, int ex, int ey, int index) {
this.sx = sx;
this.sy = sy;
this.ex = ex;
this.ey = ey;
this.index = index;
}
public boolean isFocus(int x, int y){
return x >= sx && x <= ex && y >= sy && y <= ey;
}
}
public static void main(String[] args){
List<Dialog> dialogs = new ArrayList<>();
List<String> clicks = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
String[] firstLine = scanner.nextLine().split(" ");
int n = Integer.parseInt(firstLine[0]);
int m = Integer.parseInt(firstLine[1]);
for(int i = 0; i < n; i++){
String[] line = scanner.nextLine().split(" ");
int sx = Integer.parseInt(line[0]);
int sy = Integer.parseInt(line[1]);
int ex = Integer.parseInt(line[2]);
int ey = Integer.parseInt(line[3]);
dialogs.add(new Dialog(sx, sy, ex, ey, i + 1));
}
for(int i = 0; i < m; i++){
clicks.add(scanner.nextLine());
}
scanner.close();
for(String click : clicks){
String[] data = click.split(" ");
int x = Integer.parseInt(data[0]);
int y = Integer.parseInt(data[1]);
Dialog focusDialog = null;
for(int i = dialogs.size() - 1; i >= 0; i--){
Dialog dialog = dialogs.get(i);
if(dialog.isFocus(x, y)){
focusDialog = dialog;
break;
}
}
if(focusDialog != null){
System.out.println(focusDialog.index);
dialogs.remove(focusDialog);
dialogs.add(focusDialog);
} else{
System.out.println("IGNORED");
}
}
}
}