摆放物资

问题背景:
爆发于武汉的新型冠状病毒感染的肺炎疫情牵动着全国各地人民的心,一方有难,八方支援。截至目前,山东寿光向武汉捐赠蔬菜已达1120吨;俄罗斯中国总商会组织在俄企业、华人华侨捐赠各类防护用品约15吨;直升机空降新华路体育场,解武汉协和医院燃眉之急……大批捐赠物资的管理存放是个大问题。一旦处理不好劳民伤财不说,还会寒了广大爱心人士的心。
问题描述:
现在有一块边长为n的正方形空场地用来存放物资,场地被分割成一个个边长为1的方形小区域。一共有m批物资需要存放,编号为1—m,工作人员按编号顺序依次存放这m批物资,每一批物资需要选定一个矩形区域存放。若选定的矩形区域中,某个方形小区域已经有物资,则将本批物资摞到该方形小区域的最上面。你的任务是查询某个方形小区域最上面的物资属于第几批,若无物资输出0。
注:本题时间限制1s,空间限制256MB(此处最后面有解释与提示)
俯视图:

输入描述:
第1行2个整数n和m
接下来m行,每行四个整数x1,y1,x2,y2,分别表示这批物资选定的矩形区域的左上角是第x1行y1列,右下角是第x2行y2列
接下来1行2个整数x和y,表示要查询的方形小区域是第x行y列
输出描述:
1个整数

样例输入:
10 5
1 1 3 3
4 3 6 8
8 9 10 10
4 4 5 5
2 4 7 4
5 4

样例输出:
5

数据范围:
范围一:1<=n,m,x1,y1,x2,y2<=1000
范围二:1<=n,m,x1,y1,x2,y2<=1000000

解释与提示:
一、时间限制1s:竞赛中粗略认为1s可支撑1亿次运算。
1、for(i=1;i<=10;++i) a++; 该代码可以粗略的认为进行了10次运算
2、for(i=1;i<=1000000;++i)
for(j=1;j<=10000000;++j)
a[i][j]++; 该代码可以粗略的认为进行了1万亿次运算
二、空间限制256MB:此处只粗略计算数组大小。1个int型变量是4B,那么1个10001000的二维数组所占空间:100010004/1024/1024=3.81MB。1个10000001000000的二维数组所占空间:3814697.27MB

思路:本来看完想用二维数组,但发现占用空间好像很大,就改用多个一维数组
   因为查询最上面的物资,所以从最后一次向前查询,查到的第一个包括这个
   位置的物资为这个位置最上方的物资。
   
代码:

#include<stdio.h>
int main()
{
    int a[100],b[100],c[100],d[100];
    int n,m,x,y,i;
    scanf("%d %d",&n,&m);
    for(i=1;i<=m;i++)
        scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
    scanf("%d %d",&x,&y);
    for(i=m;i>=1;i--)
    {
        if(x>=a[i]&&x<=c[i]&&y>=b[i]&&y<=d[i])
            break;
    }
    printf("%d",i);
    return 0;
}

运行结果:
在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 180

猜你喜欢

转载自blog.csdn.net/koaci/article/details/104225402
今日推荐