洛谷 P1003 铺地毯

嗯....

 

一道比较水的模拟题..

 

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

 

先看一下题吧:https://www.luogu.org/problemnew/show/P1003

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

 

第一次只过了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 }

 

转载于:https://www.cnblogs.com/New-ljx/p/10663090.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值