news 2026/4/16 15:44:10

UVa 142 Mouse Clicks

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 142 Mouse Clicks

题目分析

本题模拟了一个简单的窗口系统,需要处理鼠标点击事件,根据点击位置确定选中的区域(Region \texttt{Region}Region)或图标(Icon \texttt{Icon}Icon)。

关键规则

  1. 如果点击位置在某个区域内(包括边界),则选中该区域。
  2. 如果点击位置不在任何区域内,则选中距离最近的可见图标;如果多个图标距离相同,则全部选中。
  3. 区域会遮挡图标,被区域完全覆盖的图标视为不可见。
  4. 区域按输入顺序标记为'A''B'、…,图标按输入顺序编号为12、…。
  5. 当多个区域重叠时,后输入的区域视为在前面(即覆盖先输入的区域)。

输入格式

  • 每行以一个大写字母开头,表示数据类型:
    • I表示图标,后跟其中心坐标( x , y ) (x, y)(x,y)
    • R表示区域,后跟左上角( x 1 , y 1 ) (x_1, y_1)(x1,y1)和右下角( x 2 , y 2 ) (x_2, y_2)(x2,y2)坐标。
    • M表示鼠标点击,后跟点击坐标( x , y ) (x, y)(x,y)
  • 第一个M之后不会再出现IR
  • 输入以#结束。

输出格式

  • 对于每个鼠标点击,输出一行,表示选中的区域或图标:
    • 区域:输出单个大写字母。
    • 图标:输出其编号,宽3 33位、右对齐;若多个图标,按编号升序输出。

解题思路

  1. 数据结构设计

    • 图标(Icon \texttt{Icon}Icon):存储其中心坐标、编号、到当前点击点的距离、是否可见。
    • 区域(Region \texttt{Region}Region):存储其矩形范围(左上角和右下角坐标)、字母标签。
  2. 处理流程

    • 读入所有IR数据,分别存入向量中。
    • 遇到M时:
      a.判断是否点击在区域内:从后往前遍历区域向量(后输入的在前),若点击坐标在某个矩形内(含边界),则选中该区域,输出其标签,并跳过后续图标处理。
      b.若不在任何区域内
      • 计算每个图标到点击点的欧几里得距离平方(避免开方,比较时等价)。
      • 判断每个图标是否可见:若其中心被任何一个区域覆盖,则不可见。
      • 对图标按可见性优先、距离次之、编号最小排序。
      • 输出所有可见且距离等于最小距离的图标编号(按格式右对齐、宽3 33位)。
  3. 注意事项

    • 区域遮挡关系:后输入的区域在前,因此判断图标可见性时应遍历所有区域,只要被任意一个区域覆盖即不可见。
    • 图标距离计算:使用平方距离即可,无需开方。
    • 输出格式:图标编号需右对齐、占3 33位,多个图标按编号升序排列(排序已保证)。

代码实现

// Mouse Clicks// UVa ID: 142// Verdict: Accepted// Submission Date: 2016-01-21// UVa Run Time: 0.012s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;structicon{intleftX,topY;intlabel;intdistance;intvisible;};structregion{intleftX,topY,rightX,bottomY;charlabel;};// 图标排序比较规则booloperator<(consticon&a,consticon&b){if(a.visible==b.visible){if(a.distance==b.distance)returna.label<b.label;elsereturna.distance<b.distance;}elsereturna.visible>b.visible;}intmain(){string line;string category;intleftX,topY,rightX,bottomY;vector<icon>icons;vector<region>regions;intindexI=1,indexR=1;while(getline(cin,line),line!="#"){istringstreamiss(line);iss>>category>>leftX>>topY;if(line.find('I')!=line.npos){icons.push_back((icon){leftX,topY,indexI++,0,0});}elseif(line.find('R')!=line.npos){iss>>rightX>>bottomY;regions.push_back((region){leftX,topY,rightX,bottomY,('A'+indexR++-1)});}else{// 检查鼠标事件是否落在矩形内boolinRegion=false;for(inti=regions.size()-1;i>=0;i--){region r=regions[i];if(leftX>=r.leftX&&leftX<=r.rightX&&topY>=r.topY&&topY<=r.bottomY){cout<<r.label<<endl;inRegion=true;break;}}// 落在矩形内,不需处理后续图标if(inRegion)continue;// 计算鼠标和图标的距离for(inti=0;i<icons.size();i++)icons[i].distance=pow(icons[i].leftX-leftX,2)+pow(icons[i].topY-topY,2);// 设置图标可见性for(inti=0;i<icons.size();i++){icons[i].visible=1;for(intj=0;j<regions.size();j++){region r=regions[j];if(icons[i].leftX>=r.leftX&&icons[i].leftX<=r.rightX&&icons[i].topY>=r.topY&&icons[i].topY<=r.bottomY){icons[i].visible=0;break;}}}// 排序sort(icons.begin(),icons.end());// 按要求输出图标序号for(inti=0;i<icons.size();i++)if(icons[i].distance==icons[0].distance&&icons[i].visible)cout<<setw(3)<<right<<icons[i].label;elsebreak;cout<<'\n';}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 19:05:42

Apache Fesod 读取端的事件驱动架构

抽丝剥茧&#xff1a;Apache Fesod 读取端的事件驱动架构 1. 入口&#xff1a;一个优雅的门面 (Facade) 简约而不简单 哪怕系统内部再复杂&#xff0c;给用户的入口必须足够简单。Fesod 采用了经典的 Facade 模式&#xff08;外观模式&#xff09;。 所有的读取操作都从 Fes…

作者头像 李华
网站建设 2026/4/13 20:58:24

震惊!浙江AI巨头光景泽创,竟因这3个秘密颠覆行业!

当AI工具不再“单打独斗”&#xff1a;全链路协同如何重塑中小微企业增长逻辑 最近与几位电商和本地生活领域的创业者交流&#xff0c;一个普遍的共鸣是&#xff1a;大家手里或多或少都用上了几款AI工具——有的用AI生成海报&#xff0c;有的用机器人自动回消息&#xff0c;还…

作者头像 李华
网站建设 2026/4/16 14:26:08

马斯克“无钱论”:乌托邦愿景还是技术狂想?

对马斯克“未来没有钱的概念”&#xff0c;我的态度是短期不成立&#xff0c;长期存想象空间&#xff0c;核心在于技术落地、社会治理与价值定义三大变量的现实约束。一、马斯克的核心逻辑1. 货币本质是劳动力分配的数据库&#xff0c;AI与机器人&#xff08;如Optimus&#xf…

作者头像 李华
网站建设 2026/4/16 14:22:32

Codeforces Round 1068 (Div. 2) D,E 题解

D. Taiga’s Carry Chains Miracles don’t happen to those who just wait. — Toradora! After classes at Ohashi High School, Ryuuji hands Taiga a positive integer n n n and sets a simple challenge. They will play for exactly k k k moves. In a single mov…

作者头像 李华
网站建设 2026/4/16 14:22:17

win11卸载sql server express版本

1. 停止服务 步骤关键操作说明 / 注意1. 停止服务停止所有 “SQL Server (实例名)” 等相关服务。防止文件被占用导致无法删除。 2. 卸载程序 步骤关键操作说明 / 注意2. 卸载程序在“控制面板”-“程序和功能”中&#xff0c;卸载所有名称包含 “SQL Server” 和 “Native C…

作者头像 李华
网站建设 2026/4/16 14:31:49

基于VLAN标签的网络访问控制实验报告

实验配置步骤交换机LSW1配置交换机LSW2配置交换机LSW3配置路由器AR1配置访问控制验证&#xff08;ping测试&#xff09;pc1 ping pc6 pc3访问pc23456pc2访问pc456pc4可以访问pc5&#xff0c;不能访问pc6pc5不能访问pc6

作者头像 李华