CCF 201403-2 窗口

简介: CCF 201403-2 窗口

1. 问题描述

2. 解题思路

typedef struct {  // 矩形窗口类
    int x1;
    int y1;
    int x2;
    int y2;
    int index; // 矩形窗口的编号
} Rectangle;

利用结构体数组存储窗口的排序情况,按照顺序最底下的窗口位于数组下标最小的位置(rect[0]),最顶上的窗口位于数组下标最大的位置(rect[n-1])

每次鼠标点击时,按照窗口从上到下的顺序依次判断鼠标是否落入窗口内,若是,则输出窗口编号,并且窗口排序情况重新排序,被点中的窗口移到最顶上(顺序表的位置改变),其他顺序不变。否则继续往下遍历。最后如果都没有窗口命中,则输出 IGNORED


画出样例中的窗口排列如下:


点击(1, 1) 的时候鼠标落在二号窗口上,并且二号窗口会移动到最上层如下:

然后下层是三号,最下层是1号窗口

点击(0, 0) 的时候鼠标落在一号窗口,并一号窗口移动到最前边

这时点击(4, 4) 依旧落在一号窗口,一号窗口保持最前。

点击(0, 5)未命中任何窗口,输出 IGNORED


3. 代码实现

#include<iostream>
using namespace std;
#define MAX_N 15
#define MAX_M 15
typedef struct {  // 矩形窗口类
    int x1;
    int y1;
    int x2;
    int y2;
    int index; // 矩形窗口的编号
} Rectangle;
Rectangle rect[MAX_N];
int n, m;
int x, y;
int flag = 0;
int main() {
    cin>>n>>m;
    // 将所有窗口存入一个数组,下标小的表示在最底层,下标大的表示在顶层
    for (int i = 0;i < n;i++) {
        cin>>rect[i].x1>>rect[i].y1>>rect[i].x2>>rect[i].y2;
        rect[i].index = i+1;
    }
    for (int i = 0;i < m;i++) {
        flag = 0;
        cin>>x>>y;
        for (int j = n-1;j >= 0;j--) {  // 倒着遍历窗口数组,因为窗口数组下表越大,窗口排列越靠上。
            // 判断点是否在窗口内
            if ( x >= rect[j].x1 && x<= rect[j].x2 && y >= rect[j].y1 && y <= rect[j].y2 ) {
                flag = 1;
                cout<<rect[j].index<<endl;
                // 在这里,如果该点点中了某个窗口,那么这个窗口就要排到最前面
                Rectangle temp;
                temp = rect[j];
                for (int k = j+1;k < n;k++) {
                    rect[k-1] = rect[k];
                }
                rect[n-1] = temp;
                break;
            }
        }
        if (!flag) {
            cout<<"IGNORED"<<endl;
        }
    }
    return 0;
}
目录
打赏
0
0
0
0
6
分享
相关文章
|
4月前
【AD速成】半小时入门AltiumDesigner之绘制PCB(五)
【AD速成】半小时入门AltiumDesigner之绘制PCB(五)
725 0
中望CAD建筑版2024 SP1.3中文版
中望CAD建筑版是一款自主产权的国产CAD制图软件的建筑设计CAD软件,中望CAD建筑版2024中文版这款建筑设计软件拥有超丰富的建筑图块和图案,深度兼容建筑图纸,提供绘图标准规范,智能设计和智能统计功能.
85 2
|
9月前
|
ABB工业IT 面板800 - PP865
ABB工业IT 面板800 - PP865
|
9月前
|
【解决方案汇总】学校正版软件管理与服务平台office更新失败错误码0x80080005 + 错误码0XC004F074、0XC004F035、0XC004C003、0XC004F017+反复提示激活
【解决方案汇总】学校正版软件管理与服务平台office更新失败错误码0x80080005 + 错误码0XC004F074、0XC004F035、0XC004C003、0XC004F017+反复提示激活
759 0
BOSHIDA三河博电科技 DC AC电源模块输出输入特点
电源模块是可以直接贴装在印刷电路板上的电源供应器,其特点是可为专用集成电路(ASIC)、数字信号处理器 (DSP)、微处理器、存储器、现场可编程门阵列 (FPGA) 及其他数字或模拟负载提供供电。一般来说,这类模块称为负载点 (POL) 电源供应系统或使用点电源供应系统 (PUPS)。由于模块式结构的优点甚多,因此模块电源广泛用于交换设备、接入设备、移动通讯、微波通讯以及光传输、路由器等通信领域和汽车电子、航空航天等。三河博电科技,专业电源模块。
BOSHIDA三河博电科技 DC AC电源模块输出输入特点
ccf-csp 2014 03-2窗口
在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。 窗口的边界上的点也属于该窗口。 窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。 如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。 现在我们希望你写一个程序模拟点击窗口的过程。
97 0
ABB 5SXE04-0150/GVC707AE01 以微型形式嵌入在集成电路
ABB 5SXE04-0150/GVC707AE01 以微型形式嵌入在集成电路
ABB 5SXE04-0150/GVC707AE01  以微型形式嵌入在集成电路
ABB SCYC51020 58052582H 连接到基座的信号源
ABB SCYC51020 58052582H 连接到基座的信号源
ABB SCYC51020 58052582H  连接到基座的信号源
艾伟:WM有约(一):你好,CF
Written by Allen Lee   来,和CF打个招呼! 在这个系列里,我将会使用Visual Studio 2008来创建Windows Mobile 6 Professional应用程序,如果你也想在自己的计算机上体验一下,那么请先安装Visual Studio 2008和Windows Mobile 6 Professional SDK。
875 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等