Love丶FFC's Blog

CCF-CSP_20140302:窗口

2019-10-31 18:30:14
阅读:8378   •   评论:139
标签:,

问题描述

在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。

当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。

现在我们希望你写一个程序模拟点击窗口的过程。

输入格式

输入的第一行有两个正整数,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)

接下来 N 行按照从最下层到最顶层的顺序给出 N 个窗口的位置。 每行包含四个非负整数 x1, y1, x2, y2,表示该窗口的一对顶点坐标分别为 (x1, y1) 和 (x2, y2)。保证 x1 < x2,y1 < y2

接下来 M 行每行包含两个非负整数 x, y,表示一次鼠标点击的坐标。

题目中涉及到的所有点和矩形的顶点的 x, y 坐标分别不超过 2559 和1439。

输出格式

输出包括 M 行,每一行表示一次鼠标点击的结果。如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从 1 编号到 N);如果没有,则输出"IGNORED"(不含双引号)。

样例输入

3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5

样例输出

2
1
1
IGNORED

样例说明

第一次点击的位置同时属于第 1 和第 2 个窗口,但是由于第 2 个窗口在上面,它被选择并且被置于顶层。

第二次点击的位置只属于第 1 个窗口,因此该次点击选择了此窗口并将其置于顶层。现在的三个窗口的层次关系与初始状态恰好相反了。

第三次点击的位置同时属于三个窗口的范围,但是由于现在第 1 个窗口处于顶层,它被选择。

最后点击的 (0, 5) 不属于任何窗口。

编程语言:Python

解题思想:

1.首先存储各类数组,因为最初的数组已经按照大小层次排序输入,对每个点击坐标分别对数组从高到低进行判断。
2.如果点击成功,则保存该窗口此时的坐标,之后将所有窗口的层次重新交换,最后找出该窗口最初的位置即可

时间复杂度:O(n^2)

IDE代码如下:

  1. N, M = map(int, input().split()) # 输入窗口数和点击的次数
  2. InitialWindow = [[0, 0, 0, 0]] * N # 最初的窗口坐标列表
  3. Window = [[0, 0, 0, 0]] * N # 改变过程中的窗口坐标列表
  4. Click = [[0, 0]] * M # 点击坐标列表
  5. Top = 0 # 定义顶层窗口标号
  6. for i in range(N):
  7. Window[i] = [int(n) for n in input().split()] # 将一行的输入赋给窗口坐标列表
  8. InitialWindow[i] = Window[i]
  9. for i in range(M):
  10. Click[i] = [int(n) for n in input().split()] # 将一行的输入赋给点击坐标列表
  11.  
  12. Clicked = [0] * N # 定义层级关系列表
  13. for i in range(M):
  14. Judge = False # 判断是否点击成功
  15. for j in range(N - 1, -1, -1):
  16. if Click[i][0] >= Window[j][0] and Click[i][0] <= Window[j][2] and Click[i][1] >= Window[j][1] and Click[i][1] <= Window[j][3]:
  17. Judge = True
  18. Top = j
  19. break
  20. if Judge == True: # 存在点击成功的窗口
  21. Topwindow = Window[Top] # 暂时存储顶层窗口
  22. for k in range(Top, N - 1):
  23. Window[k] = Window[k + 1] # 依次进行窗口层次替换
  24. Window[N - 1] = Topwindow # 覆盖顶层窗口
  25. for l in range(N): # 找出该顶层窗口在最初的位置标号并输出
  26. if Window[N - 1][0] == InitialWindow[l][0] and Window[N - 1][1] == InitialWindow[l][1] and Window[N - 1][
  27. 2] == InitialWindow[l][2] and Window[N - 1][3] == InitialWindow[l][3]:
  28. print(l + 1)
  29. break
  30. else: # 不存在点击成功的窗口
  31. print("IGNORED")

评论板

共有 139 条评论

  1. fruinly

    real cialis no generic Mammographic Density Estimates

  2. engarma

    a prohibited substance is found to be present within the athlete s body tissue or fluids; or buy real cialis online

  3. Preliaf

    cialis generic name It said the bombardment of Sumter

  4. Preliaf

    Several studies have demonstrated a role for PVL in dermonecrosis cialis 5mg

  5. lZFFZdbT

    Our results validated that blocking mitochondrial translation reduces cytosolic translation and leads to a detection of reduced level of proteins in both N2 and CB4856 worms as a consequence D Amico et al viagra for covid

--------查看该分类下最新文章--------
^
新版博客正在完善中!域名:http://www.loveffc:8080,点击跳转,完全移植后将去除端口号。

Copyright © 2018 - 2021 FFC的小站 - 滇 ICP 备 18010780 号 - 1

- Powered by WordPress & AliYun · Theme by FFC -

- Environment by Windows & XAMPP · Designed by WebStorm & VSCode -

已运行:

访问量:426324