【问题描述】

在计算机屏幕上,有N 个窗口。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。当你用鼠标点击屏幕上一个点的时候,若其在窗口内,你就选择了处于被点击位置所属的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。编写一个程序模拟点击窗口的过程:先从标准输入读入窗口的个数,窗口编号和位置(以窗口的左上角和右下角的坐标表示,先输入的窗口层次高),然后输入点击的次数和位置(以点击的坐标表示),编写程序求得经过上述点击后窗口的叠放次序。
假设:
1、屏幕的左下角作为X轴和Y轴坐标原点,即坐标为(0,0),所有输入的坐标数值都是整数,并且都大于等于0,小于等于1000。
2、输出窗口的叠放次序时从最后点击后最顶层的窗口编号开始按层次依次输出;
3、输入的窗口个数大于0并且小于等于10,点击次数大于0并且小于等于20。

【输入形式】

先输入窗口的个数,然后从下一行开始分行输入五个整数分别表示各个窗口编号和左上角的横坐标和纵坐标,以及右下角的横坐标和纵坐标,各整数之间以一个空格分隔;
再输入点击次数,并且从下一行开始分行输入两个整数分别表示点击处的横坐标和纵坐标,两个整数之间以一个空格分隔。最后一对坐标后也有回车换行。

【输出形式】

输出窗口的叠放次序时从最后点击后最顶层的窗口编号开始按层次依次输出,各个编号之间以一个空格分隔,最后一个编号后的空格可有可无。

【样例输入】

4
1 43 56 70 31
2 50 50 80 24
3 23 42 63 13
4 57 62 90 36
5
47 28
73 40
60 38
72 52
35 56

【样例输出】

4 2 3 1

【样例说明】

输入的模拟屏幕上有4个窗口,最顶层窗口的左上角和右下角的坐标分别为(43,56)和(70,31),其编号为1,下面各层窗口的左上角和右下角分别为(50,50)和(80,24),(23,42)和(63,13),(57,62)和(90,36),编号分别为2、3、4。第一次点击点坐标为(47,28),由于该点只落在了编号为3的窗口内,所以该窗口被激活变成了顶层窗口,窗口叠放次序变为(3,1,2,4);第二次点击在(73,40),落在编号为2和4的重叠区域,由于2号窗口在4号窗口上方,所以这次点击激活了2号窗口,其变为顶层窗口,这时窗口叠放次序为(2,3,1,4);第三次点击在(60,38),该区域是所有窗口的重叠区域,当然也点击在了顶层2号窗口内,窗口叠放次序没有变化;第四次点击在(72,52),该点只落在了4号窗口内,所以4号窗口又被激活成为顶层窗口,窗口叠放次序变为(4,2,3,1);第五次点击在(35,56),不属于任何窗口,所以没有改变窗口叠放次序。这时4号窗口为顶层窗口,向下依次为2、3和1号窗口。

【评分标准】要求模拟点击窗口的过程,求得最终的窗口叠放次序,提交程序文件名为windows.c或wndows.cpp。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <stdlib.h>
#include <cstdlib>
#include <string.h>
#include <string>
#include <cmath>
#include <stack>
#include <time.h>
#include <vector>
using namespace std;
 + ][ + ];
 + ];
int n;
struct rectangle {
    int a, b, c, d;
    int index;
}rec[ + ];
void first(int a) {
    ;
    while (order[i] != a)
        i++;
    ) {
        order[i] = order[i - ];
        i--;
    }
    order[] = a;
}
void print(int a, int b, int c, int d, int e) {
    for (int i = a; i <= c; i++) {
        for (int j = b; j >= d; j--) {
            m[i][j] = e;
        }
    }
}
int main() {
    int a, b, c, d, e;
    stack<int> mystack;

    cin >> n;
    ; i <= n; i++) {
        scanf("%d %d %d %d %d", &rec[i].index, &rec[i].a, &rec[i].b, &rec[i].c, &rec[i].d);
        order[i] = i;
    }
    ; i--) {
        print(rec[i].a, rec[i].b, rec[i].c, rec[i].d, rec[i].index);
    }
    int nn;
    cin >> nn;
    int p1, p2;
    ; i < nn; i++) {
        scanf("%d %d", &p1, &p2);
        ) {
            int t = m[p1][p2];
            print(rec[t].a, rec[t].b, rec[t].c, rec[t].d, rec[t].index);
            first(t);
        }
    }
    ; i <= n; i++) {
        cout << order[i] << " ";
    }
    ;
}

窗口点击模拟a的更多相关文章

  1. Windows 点击 模拟

    点击模拟  安卓模拟器  爬虫

  2. [Android]对话框样式Activity获得窗口外点击事件

    Dialog除了使用Dialog类来实现之外,还可以使用Dialog样式的Activity来实现,只需要在注册Activity时指明theme为adnroid:Theme.Dialog就行,这样的Di ...

  3. PyQt(Python+Qt)学习随笔:在一个窗口点击按钮弹出另一个窗口的实现方法及注意事项

    在Qt Designer中定义了两个窗口,一个主窗口一个弹出窗口,需要实现在主窗口点击一个按钮时弹出弹出窗口. 经老猿验证: 1.弹窗的窗口类型无特殊要求,只要是QWidget等窗口部件就可以,也可以 ...

  4. Duilib 实现窗口点击关闭确认退出提示

    此功能是记住用户的操作,在用户点击关闭时是真退出程序还是最小化到托盘,我们常见的PC客户端都有此功能,例如:IMO客户端.网易云音乐 我自己的项目中也要实现此功能,在此总结一下,最终效果: .h文件 ...

  5. herf窗口点击跳转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Flex里监听mouseDownOutside事件解决弹出窗口点击空白关闭功能

    其实当用户在使用 PopUpManager 打开的某个组件外部单击时,会从该组件分派一个mouseDownOutside事件 监听该事件就能实现点击空白处关闭窗口的功能 this.addEventLi ...

  7. a标签不用点击模拟跳转url。

    因为请求到数据前要判断用户是否是登录状态, 所以就想页面数据请求成功,就跳转到登录页面, 就用了location.href = url. 结果因为同源策略不能访问, 没想到a标签竟然可以直接跳转这个U ...

  8. [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作

    public void clickReportIcon(){ String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口 p ...

  9. winform 窗口点击窗体任意位置移动窗体

    private bool _isDown; private Point _mousePoint; private void Users_MouseDown(object sender, MouseEv ...

随机推荐

  1. Matching (2)

    HALCON 10.0  II-B 3.1 Gray-Value-Based Matching 基于灰度的匹配是一个非常经典的方法,它仅适用于对象的不模糊,不缺失,灰度值不变化.适用于对象旋转转.注意 ...

  2. LeetCode OJ:Longest Increasing Subsequence(最长递增序列)

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  3. Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。

    myeclipse和eclipse集成编译软件,都提供了一个快捷键用来批量重命名变量:Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量.扩展知识:如果想要重命名文件名,又不想手动 ...

  4. Laravel 文件夹结构简介

    表 1.1:Laravel 文件夹结构简介 文件夹名称 简介 app 应用程序的业务逻辑代码存放文件夹 app/Console 存放自定义 Artisian 命令文件 app/Http/Control ...

  5. TCP 初步认识

    TCP连接的建立---三次握手 第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据段. 该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数据段被称为SYN数据段. 另外 ...

  6. JSON Schema(模式)

    JSON Schema指的是数据交换中的一种虚拟的“合同”. JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验. JSON Schema是数据接收方额第一道防线,也是数据发送方 ...

  7. CF 382C

    http://codeforces.com/problemset/problem/382/C 读完题立刻知道怎么做,然后分类讨论到吐血,写挂了,巨蠢 #include <iostream> ...

  8. VS2010对c++11的支持情况验证

    目前仅仅测试工作中 使用的比较多的: 智能指针 shared_ptr #include <memory> std::shared_ptr<A> a(new A); ----支持 ...

  9. Bluetooth(android 4.2.2版本)

    Android provides a default Bluetooth stack, BlueDroid, that is divided into two layers: The Bluetoot ...

  10. android Camera模块分析

    Android Camera Module Architecture and Bottom layer communication mechanism              ----------- ...