洛谷P1003 铺地毯 模拟

这一题就是一个很普通的模拟,每次输入的时候存储四个角的值

把四个角的横纵坐标存储在一排。然后在倒序遍历一遍,查找的时候就看所要查找的坐标在不在这个范围内,如果找到了就标记一下再输出,如果没有找到就输出-1;时间复杂度只有O(n);

题目描述

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n张地毯,编号从 1n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。

地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

输入格式

输入共 n+2n + 2n+2 行。

第一行,一个整数 nnn,表示总共有 nnn 张地毯。

接下来的 n 行中,第 i+1行表示编号 iii 的地毯的信息,包含四个正整数 a,b,g,k每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b) 以及地毯在 x 轴和y 轴方向的长度。

n+2行包含两个正整数 xy,表示所求的地面的点的坐标 (x,y)

输出格式

输出共 1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出 -1

输入输出样例

输入 #1
3
1 0 2 3
0 2 3 3
2 1 3 3
2 2
输出 #1
3

输入 #2
3
1 0 2 3
0 2 3 3
2 1 3 3
4 5
输出 #2
-1

说明/提示

【样例解释 1】

如下图,111 号地毯用实线表示,222 号地毯用虚线表示,333 号用双实线表示,覆盖点 (2,2)(2,2)(2,2) 的最上面一张地毯是 333 号地毯。

【数据范围】

对于 30% 的数据,有 n≤2n \le 2n≤2。
对于 50% 的数据,0≤a,b,g,k≤1000 \le a, b, g, k \le 1000≤a,b,g,k≤100。
对于 100%的数据,有 0≤n≤1040 \le n \le 10^40≤n≤104, 0≤a,b,g,k≤1050 \le a, b, g, k \le {10}^50≤a,b,g,k≤105。

noip2011 提高组 day1 第 111 题

这一题就是一个很普通的模拟,每次输入的时候存储四个角的值

把四个角的横纵坐标存储在一排。然后在倒序遍历一遍,查找的时候就看所要查找的坐标在不在这个范围内,如果找到了就标记一下再输出,如果没有找到就输出-1;时间复杂度只有O(n);

比如样例1

        3
        1 0 2 3
        0 2 3 3
        2 1 3 3
        2 2    查找的是(2,2)我们在输入的时候存储的方式是这样的↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 

          我们把每次的输入存储在一个二维数组里,就🆗了   

1(左下点的横坐标) 0(左下点的纵坐标) 3(右上点的横坐标) 3(右上点的纵坐标)
0 2 3 5
2 1 5 4

         

 

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int m[10000][5];//定义一个二维数组
 5 
 6 int main()
 7 {
 8     int n;
 9     cin>>n;
10     int x,y;
11     for(int i=1;i<=n;i++)
12     {
13       cin>>m[i][1]>>m[i][2]>>m[i][3]>>m[i][4];
14       m[i][3]+=m[i][1];
15       m[i][4]+=m[i][2];
16 
17     }
18     cin>>x>>y;
19     int flag=0;
20 for(int j=n;j>=1;j--)
21   {    //if 就来判断是否满足
22       if(x>=m[j][1]&&x<=m[j][3]&&y<=m[j][4]&&y>=m[j][2]){   cout<<j<<'\n';//满足条件快乐的输出
23       flag=1;//标记一下表示我找到了
24       break;}
25       //cout<<00;
26   }
27     if(flag==0)cout<<-1<<'\n';//没找到输出-1;
28     return 0;
29 }

 

 

posted @ 2020-03-22 10:37  小靖快去敲代码  阅读(180)  评论(1编辑  收藏  举报