zoukankan      html  css  js  c++  java
  • [NOIP2011 D1T1] 铺地毯carpet

    NOIP2011 D1T1 铺地毯carpet

    时间限制: 1 Sec
    内存限制: 128 MB

    题目描述

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

    样例输入

    3
    1 0 2 3
    0 2 3 3
    2 1 3 3
    2 2

    样例输出

    3

    提示

    数据范围:

    30% n<=2

    50% 0<=a,b,g,k<=100

    100% 0<=n<=10000, 0<=a,b,g,k<=100000

    NOIP2011 DAY1 carpet

    【题解】

    学习黄学长的博客我也来从头刷起了orzhzwer

    这题嘛,随便搞搞O(n)就行了。

     1 #include<stdio.h>
     2 using namespace std;
     3 int x,y,a[10010],b[10010],g[10010],k[10010],n,p=-1;
     4 int main() {
     5     scanf("%d",&n);
     6     for (int i=1;i<=n;++i) 
     7         scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);
     8     scanf("%d%d",&x,&y);
     9     for (int i=1;i<=n;++i) 
    10         if(a[i]<=x&&(a[i]+g[i])>=x&&b[i]<=y &&(b[i]+k[i])>=y) p=i;
    11     printf("%d
    ",p);
    12     return 0;
    13 }
    View Code

     如果询问数很多,达到了105,那么O(nm)一定会爆,我们可以离线处理。

    对询问进行排序然后用线段树来维护即可。(By HZWER的博客)

  • 相关阅读:
    Daily Scrum 12.9
    成员总结
    反省与深思
    M1事后分析报告--We have power to change the origin state
    PowerTeam--Alpha阶段个人贡献分及转会人员
    Pipeline Alpha版本项目展示
    js 字符串操作函数
    js与jq对数组的操作
    js 与 jq 的节点添加删除实例
    js,jq,css选择器
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/noip2011d1t1.html
Copyright © 2011-2022 走看看