码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • CCF CSP 201403-2 窗口 题解


    问题描述

      在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。
      当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。
      现在我们希望你写一个程序模拟点击窗口的过程。

    输入格式

      输入的第一行有两个正整数,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)
      接下来 N 行按照从最下层到最顶层的顺序给出 N 个窗口的位置。 每行包含四个非负整数 x1, y1, x2, y2,表示该窗口的一对顶点坐标分别为 (x1, y1) 和 (x2, y2)。保证 x1 < x2,y1 2。
      接下来 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) 不属于任何窗口。

    1. #include
    2. //判断点是否在某个框内
    3. int pd(int x,int y,int a,int b,int c,int d){
    4. if(x>=a&&x<=c&&y>=b&&y<=d) return 1;
    5. else return 0;
    6. }
    7. int main(){
    8. int n,m;
    9. scanf("%d%d",&n,&m);
    10. int window[n][5];
    11. for(int i=0;i0]=i+1;
    12. for(int i=0;i
    13. for(int j=1;j<5;j++){
    14. scanf("%d",&window[i][j]);
    15. }
    16. }
    17. int op[2],x=0,result[10];
    18. for(int i=0;i
    19. for(int j=0;j<2;j++){
    20. scanf("%d",&op[j]);
    21. }
    22. for(int p=n-1;p>=0;p--){
    23. if(pd(op[0],op[1],window[p][1],window[p][2],window[p][3],window[p][4])==1){
    24. //输出该矩形标号,把该矩形移到最顶端
    25. result[x]=window[p][0];
    26. x++;
    27. //将p后面的数组前移,原来的p移到最后一位
    28. //temp存储p
    29. int temp[5];
    30. for(int q=0;q<5;q++) temp[q]=window[p][q];
    31. for(int q=p;q-1;q++) {
    32. for(int r=0;r<5;r++){
    33. window[q][r]=window[q+1][r];
    34. }
    35. }
    36. for(int q=0;q<5;q++) window[n-1][q]=temp[q];
    37. break;
    38. }else if(p==0) {
    39. result[x]=n+2;
    40. x++;
    41. }
    42. }
    43. }
    44. for(int i=0;i<10;i++){
    45. if(result[i]==n+2) printf("IGNORED\n");
    46. else if(result[i]==0) break;
    47. else if(result[i]<=n+1)printf("%d\n",result[i]);
    48. }
    49. return 0;
    50. }

  • 相关阅读:
    代码随想录算法训练营第五十三天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和
    【Java高级技术】单元测试——概述和快速入门
    造一个CPU
    腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务
    某城市道路桥梁设计计算书+cad图纸
    float、double类型的转化和判断为零问题
    语句覆盖就是设计测试用例,运行测试程序,使得每一可执行语句至少执行一次。 判定覆盖:设计测试用例,使程序中的每个逻辑判定的取真和取假的分支至少经历一次。条件覆盖基本思想:设计用例,使每个判断中的每个
    Linux部署项目
    wps/word中字体安装教程
    3.5 讲一讲关于小红书的搜索引流技巧【玩赚小红书】
  • 原文地址:https://blog.csdn.net/xxsnsxx/article/details/132647374
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号