首页 > 其他 > 详细

洛谷 P1003 铺地毯

时间:2019-04-06 23:02:45      阅读:123      评论:0      收藏:0      [点我收藏+]

嗯....

 

一道比较水的模拟题..

 

刚拿到题的时候被它的数据范围吓到了,二维数组不可能开那么大啊,可是一边做发现测试数据太水 ...

 

先看一下题吧...

 

题目描述

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

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

输入输出格式

 

输入格式:

 

输入共n+2

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

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

n+2行包含两个正整数x和y,表示所求的地面的点的坐标(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】

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

技术分享图片

【数据范围】

对于30% 的数据,有 n ≤2 ;
对于50% 的数据,0 ≤a, b, g, k≤1000
对于100%的数据,有 0 ≤n ≤10,0000

noip2011提高组day1第1题

 

---------貌似说明没有用,本来我们就是后面的自动将前面的覆盖..

 

第一次只过了3个点,本来以为是MLE,没想到是WA....然后才发现自己居然只判断了一边的边界,另一边的边界没有判断...

 

思路:

  首先一次性地将所有的东西全都输入,然后进行逆序查找,会节省一些时间,如果发现g[x][y]点上覆盖着地毯,直接输出即可(这与题中的说明有关...

 

下面是AC代码...

 1 #include<cstdio>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 
 6 
 7 int g[10005][10005];
 8 int a[10005][4];
 9 int x, y;
10 
11 int main(){
12     int n;
13     scanf("%d", &n);
14     for(int i = 1; i <= n; i++){
15         for(int j = 1; j <= 4; j++){
16             scanf("%d", &a[i][j]); 
17         }
18     }
19     scanf("%d%d", &x, &y);//全部读入 
20     for(int i = n; i >= 1; i--){//逆序查找(将地毯从上往下掀 
21         if(x >= a[i][1] && x <= a[i][1] + a[i][3] && y >= a[i][2] && y <= a[i][2] + a[i][4]){//注意一共有四个边界 
22             printf("%d", i);
23             return 0;
24         }
25     }
26     printf("-1");//没有覆盖 
27     return 0;
28 }

 

洛谷 P1003 铺地毯

原文:https://www.cnblogs.com/New-ljx/p/10663090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!