CCF-CSP 201403-2 窗口 [C++]

这篇博客主要介绍了CCF-CSP 201403-2题目的窗口问题。作者提出了一个算法思路,即创建一个类来存储窗口数据,并在接收到点击操作时,遍历窗口列表,将包含点击坐标的窗口移到最前面。如果找不到包含点击坐标的窗口,则忽略此次点击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CCF-CSP 201403-2 窗口

题目描述

CCF-CSP 201403-2 窗口

思路

首先需要一个类来保存一个窗口的数据。点击操作时,从前到后遍历窗口,知道x,y坐标位于某个窗口中,将这个窗口拿出来排在最前面。(或者不存在这样的窗口,则点击被忽略)

代码

#include <bits/stdc++.h>
using namespace std;

string ign = "IGNORED";


class Window{
public:
    int x1,x2,y1,y2,no;
    
    Window(int _x1, int _y1, int _x2, int _y2,int _no) {
        x1 = _x1;
        y1 = _y1;
        x2 = _x2;
        y2 = _y2;
        no = _no;
    }
    
    bool hit(int x, int y) {
        return x1 <= x && x <= x2 && y1 <= y && y <= y2;
    }
};

int main() {
    int n; cin >> n;
    int m; cin >> m;
    vector<Window> windows;//下标小的位于底层
    
    // 输入窗口
    int i;
    for (i = 0; i < n; i++) {
        int x1; cin >> x1;
        int y1; cin >> y1;
        int x2; cin >> x2;
        int y2; cin >> y2;
        windows.push_back(Window(x1,y1,x2,y2,i+1));
    }
    
    // 点击窗口 m 次
    int x,y,j;
    bool hit_f;
    for (i = 0; i < m;i++){
        cin >> x; cin >> y;
        hit_f = false;
        for (j = n-1; j >= 0; j--){
            if (windows[j].hit(x,y)) {
                Window temp = windows[j];
                windows.erase(windows.begin()+j);
                windows.push_back(temp);
                hit_f = true;
                cout << temp.no << endl;
                break;
            }
        }
        if (!hit_f) {
            cout << ign << endl;
        }
    }
    
    
    return 0;
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值