首页 > 其他分享 >P1003 [NOIP2011 提高组] 铺地毯

P1003 [NOIP2011 提高组] 铺地毯

时间:2022-12-24 16:23:00浏览次数:69  
标签:le NOIP2011 int 样例 P1003 DT kx 地毯

P1003 [NOIP2011 提高组] 铺地毯

题目描述

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 $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

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

样例 #2

样例输入 #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 \le 2$。
对于 $50%$ 的数据,$0 \le a, b, g, k \le 100$。
对于 $100%$ 的数据,有 $0 \le n \le 10^4$, $0 \le a, b, g, k \le {10}^5$。

noip2011 提高组 day1 第 $1$ 题。

思路

(1)直接二维数组枚举

数组大小:4 * 10000 * 10000 = 400000000 Byte = 400000 KB = 400MB4∗10000∗10000=400000000Byte=400000KB=400MB

不符合要求

(2)从后往前枚举 找到符合要求的就退出
如何才是符合要求
zvMEs1.png

即为

  if(kx>=g.bx&&kx<=g.ax&&ky>=g.by&&ky<=g.ay)
    {
        return true;
    }

    return false;

代码

#include<bits/stdc++.h>

using namespace std;

//地毯信息
struct node
{
    int ax,ay,bx,by;
}DT[10020];

//地毯数量
int n;

//目标位置
int kx,ky;

void put(int a,int b,int g,int k,int i)
{
    DT[i].ax=a+g;
    DT[i].ay=b+k;
    DT[i].bx=a;
    DT[i].by=b;
}

void init()
{
    cin>>n;

    int a,b,g,k;

    for(int i=1;i<=n;i++)
    {
        cin>>a>>b>>g>>k;

        put(a,b,g,k,i);
    }

    cin>>kx>>ky;
}

bool pd(node g)
{
    if(kx>=g.bx&&kx<=g.ax&&ky>=g.by&&ky<=g.ay)
    {
        return true;
    }

    return false;
}

void doit()
{
    for(int i=n;i>=1;i--)
    {
        if(pd(DT[i]))
        {
            cout<<i;
            exit(0);
        }
    }

    cout<<-1;
    exit(0);
}

int main()
{

    init();

    doit();

    return 0;
}

标签:le,NOIP2011,int,样例,P1003,DT,kx,地毯
From: https://www.cnblogs.com/YzaCsp/p/17002988.html

相关文章

  • P1311 [NOIP2011 提高组] 选择客栈
     一个数组,每个元素属性:颜色和代价,选择2个元素l,r,颜色要相同,且[l,r]区间的min(代价)<=P;问有多少方案 dp思想,还有维护信息 f[i]=f[j],(i,j颜色相同)考虑......
  • [NOIP2011 提高组] Mayan 游戏
    DescriptionlinkSolution令当当前棋盘为\(a\)。注意到\(n\leq5\)且棋盘是\(5\times7\)的,所以直接爆搜可以做到\(O(35^5)=O(52521875)\),然而这里还有很大的常数......
  • P1003 [NOIP2011 提高组] 铺地毯 题解
    题目传送门[NOIP2011提高组]铺地毯题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有\(n\)......
  • 3. [2011年NOIP提高组] 铺地毯
    题目链接本题精彩所在:数据范围数据范围是x,y分别到达了100000,开二维数组无疑会空间爆炸因此,我们可以通过他给予的坐标范围(围成一个四边形)通过逆序判断坐标是否越界,来做......
  • [2011年NOIP提高组] 铺地毯
    输入每个地毯的位置大小,用二维数组存储然后输入指定的点枚举出此点所在地毯(四个顶点上的点也算被地毯覆盖)输出地毯编号(若此处没有被地毯覆盖则输出-1)代码:#include<ios......
  • [2011年NOIP提高组] 铺地毯
    [2011年NOIP提高组]铺地毯思路:运用暴力枚举法。开一个结构体存地毯信息,然后铺上地毯。然后在根据要找的地点,与输入顺序反着一一枚举来找符合的地毯(因为地毯会覆盖,先铺的......
  • [2011年NOIP提高组] 铺地毯
    为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大......
  • [2011年NOIP提高组] 铺地毯
    [2011年NOIP提高组]铺地毯分析:根据题意,用for循环n张地毯,用if语句判断题目给出的点是否在地毯范围内(地毯左下角的坐标到加上地毯长度后的坐标就是整个地毯的范围),如果在su......
  • [2011年NOIP提高组] 铺地毯
    首先想到用二维数组,但是内存太大会爆;因为题目说的是最上面的那块地毯,所以暗示我们应该用for循环倒着推,又给了我们每个地毯的大小和位置,那我们直接从后看这块地毯包不包含(x,......
  • [2011年NOIP提高组] 铺地毯
    试题分析:要求最后覆盖的地毯的编号,所以可以从n向上遍历,找到符合要求的地毯,然后输出注意:没有地毯时输出-1#include<bits/stdc++.h>usingnamespacestd;intmain(){ ints......