铺地毯(NOIP真题)
题目描述
为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 nn 张地毯,编号从 11 到nn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
输入输出格式
输入格式:
输入共n+2行
第一行,一个整数n,表示总共有n张地毯
接下来的n行中,第 i+1行表示编号i的地毯的信息,包含四个正整数a ,b ,g ,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y轴方向的长度
第n+2行包含两个正整数x和y,表示所求的地面的点的坐标(x,y)
输出格式:
输出共1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1
题目分析
首先读题,不难发现题目里的坑:地毯在x轴和y轴的长度。
不是右下角的下标!!!
OK,明确了这一点,做题就不难了。
思路一
由于是一道几何类的题目,所以第一时间就会想到模拟。
显然,1e5完全是可以模拟的,于是有以下代码:
#include<bits/stdc++.h>
using namespace std;
int hc[100001][100001];
int main(){memset(hc,-1,sizeof(hc));int n;cin>>n;for(int k=1;k<=n;k++){int xxx,yyy,xc,yc;cin>>xxx>>yyy>>xc>>yc;for(int i=xxx;i<=xxx+xc;i++){for(int j=yyy;j<=yyy+yc;j++){hc[i][j]=k;}}}int xx,yy;cin>>xx>>yy;cout<<hc[xx][yy];return 0;
}
跑得出来吗,当然跑得出来,但是,时间复杂度不难计算:O(ngk),简单来说,最多1e14。
谁家编译器跑得出这速度?
于是想到,这个方法太笨了,不可行!
思路二
既然gk的复杂度就会到1e10,想都不用想,不可能去开个巨大的数组然后无限次遍历。
对于一个点,怎样情况下它会被覆盖呢?
易得:x>=a[i].left_up_x&&x<=a[i].left_up_x+xc&&y>=a[i].left_up_y&&y<=a[i].left_up_y+yc;
只要满足以上情况,这个点就被覆盖。
所以,我们得先把a[i]的数据存起来。
就有代码:
for(int i=1;i<=n;i++){cin>>a[i].left_up_x>>a[i].left_up_y>>a[i].xc>>a[i].yc;}
很显然,后面往上面盖的地毯肯定在上面,于是从a[n]开始遍历。
就有代码:
for(int i=n;i>=1;i--){if(xx>=a[i].left_up_x&&xx<=a[i].left_up_x+a[i].xc&&yy>=a[i].left_up_y&&yy<=a[i].left_up_y+a[i].yc){cout<<i<<endl;return 0;}}
连起来就是:
#include<bits/stdc++.h>
using namespace std;
struct dt{int left_up_x,left_up_y;int xc,yc;
};
int main(){dt a[10001];int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].left_up_x>>a[i].left_up_y>>a[i].xc>>a[i].yc;}int xx,yy;cin>>xx>>yy;for(int i=n;i>=1;i--){if(xx>=a[i].left_up_x&&xx<=a[i].left_up_x+a[i].xc&&yy>=a[i].left_up_y&&yy<=a[i].left_up_y+a[i].yc){cout<<i<<endl;return 0;}}cout<<-1<<endl;return 0;
}
时间复杂度O(n),值得信赖!
铺地毯(NOIP真题)相关推荐
- 【刷题汇总】 CSP/NOIP真题分析 基础OJ刷题包
1.NOIP与CSP-J/S的历年真题分析汇总 序号 标题 内容 属性 1 CSP-J2-2021 解题报告 J组真题讲解 题解包 2 CSP-J2-2020 解题报告 J组真题讲解 题解包 3 CS ...
- [NOIP2011]铺地毯
[NOIP2011]铺地毯这是一道比较简单的noip真题,我们稍微转点弯,直接模拟做就是,我们先来看看题目描述: 题目链接:[NOIP2011]铺地毯 思路 我们可以发现直接暴力模拟是不行的,那么可以 ...
- P1003 铺地毯(模拟)
洛谷 / 题目列表 / 题目详情 P1003 铺地毯 Luogu 应用 题库 训练 比赛 记录 讨论 38.1K 通过 98.9K 提交 题目提供者 CCF_NOI 评测方式 云端评测 标签 NOIp ...
- 【信息学竞赛真题! ! !】信息学竞赛人必看的「NOIP2011」铺地毯 题解(C++版)
Hi,朋友们.又见面了.上次我们做了一道美国题,这次我们来干一道"国产"题目 文章目录 A.题目描述 B.初步分析 如果使用二维数组-- C.改进算法 D.补充模块 1.喜闻见乐的 ...
- NOIP历年第二轮入门组真题集合
NOIP历年第二轮入门组真题集合 年份 题目 题解链接 2000 T1-计算器的改良 T2- 税收与补贴问题 T3-乘积最大 T4-单词接龙 题解链接 2001 T1-数的记数 T2-最大公约数和最小 ...
- NOIP普及组历届真题(1997~2018)
供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...
- NOIP CSP-J CSP-S 数论 历年真题
1957:[12NOIP普及组]质因数分解 http://ybt.ssoier.cn:8088/problem_show.php?pid=1957 2004:[20CSPJ普及组]优秀的拆分 http ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
最新文章
- 算法:删除排序数组中的重复项||
- workbench mysql mac_mysql workbench mac下载-mysql workbench mac 64位下载8.0.15 官方最新版__西西软件下载...
- Android控件捕获点击事件的范围
- Nginx服务器证书部署-亚洲诚信
- Xcode5打包静态库
- 使用信号灯法,标志位解决测试生产者消费者问题(源码解析、建议收藏)
- jeesite如何已生成数据的数据源_JeeSite如何正确连接SQL SERVER 数据库
- Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
- Top20網頁爬蟲工具—5分鐘獲取網站數據
- PMP考试备考个人体会
- 第一个包不是SYN包?用科来数据包分析软件排除一次故障。
- 计算机网络ping用法,新手入门:ping命令的用法解释
- Camrea测试-- CTS测试
- 老九学堂C++实现小游戏之小公主养成记
- 【MySQL】数据库的高级查询
- 苹果真抠门!iPhone 12不再附送充电器
- 源码角度分析Rebuild和Rebatch
- ImportError: /home/yang/anaconda3/envs/sar/bin/../lib/libgio-2.0.so.0: undefined symbol: g_unix_get_
- 6.cisco思科模拟器子网划分练习题
- 在家也可以享受购物体验?AR+Scene 帮您实现商品3D展示和虚拟试戴
热门文章
- matlab在大气科学,MATLAB入门在大气科学中的应用学术沙龙活动圆满成功
- 工程师如何对待开源 | 一个老工程师的肺腑之言
- Nacos本地进行了远程配置而远程未配置相关信息而导致应用报内存泄漏问题的异常
- SQL SERVER DAY函数
- STC11F02实现红外线遥控开关
- CSS实现3D正方体动态旋转效果【源码+GIF图】
- 正态分布某一点的概率怎么算_统计基础篇之十三:怎么理解正态分布(二)
- Composure获取子层级图像:使用变换通道
- Problem D. Euler Function HDU - 6322(欧拉数,找规律)
- cad2010怎么隐藏标注尺寸,cad2007怎么隐藏标注尺寸