zoukankan      html  css  js  c++  java
  • 洛谷 P3079 [USACO13MAR]农场的画Farm Painting

    题目描述

    After several harsh winters, Farmer John has decided it is time to re-paint his farm. The farm consists of N fenced enclosures (1 <= N <= 50,000), each of which can be described by a rectangle in the 2D plane whose sides are parallel to the x and y axes. Enclosures may be contained within other enclosures, but no two fences intersect, so if two enclosures cover the same area of the 2D plane, one must be contained within the other.

    FJ figures that an enclosure contained within another enclosure will not be visible to the outside world, so he only wants to re-paint enclosures that are themselves not contained within any other enclosures. Please help FJ determine the total number of enclosures he needs to paint.

    经过几个严冬,农场主约翰决定是重新粉刷农场的时候了。该农场由nn个围栏围成(1<=n=500001<=n=50000),每一个都可以用二维平面上的矩形来描述,其两侧平行于x和y轴。牛圈可能包含在其他牛圈中,但没有两个栅栏相交(不同牛圈的边不会有接触)。因此如果两个牛圈覆盖了二维平面的同一区域,那么一个必须包含在另一个内。

    FJ知道,被其他牛圈包含的牛圈是不会被外面的人看到的。众所周知,FJ非常懒,所以他只想刷露在外面的牛圈,请帮助他求出总共需要刷的牛圈的个数。

    输入输出格式

    输入格式:

     

    • Line 1: The number of enclosures, N.

    • Lines 2..1+N: Each line describes an enclosure by 4 space-separated integers x1, y1, x2, and y2, where (x1,y1) is the lower-left corner of the enclosure and (x2,y2) is the upper-right corner. All coordinates are in the range 0..1,000,000.

    第一行 一个数,牛圈的总数nn

    第二到n+1n+1行 每行四个数,起点坐标x1,y1x1,y1和终点坐标x2,y2x2,y2

     

    输出格式:

     

    • Line 1: The number of enclosures that are not contained within other enclosures.

    FJ总共需要刷的牛圈的个数

     

    输入输出样例

    输入样例#1: 复制
    3 
    2 0 8 9 
    10 2 11 3 
    4 2 6 5 
    
    输出样例#1: 复制
    2 
    

    说明

    There are three enclosures. The first has corners (2,0) and (8,9), and so on.

    Enclosure 3 is contained within enclosure 1, so there are two enclosures not contained within other enclosures.

    思路:围栏i包含围栏j的必要条件:x1[j]>x2[i]

      也就是这样的:

    然后还应该满足一下几个条件:

      x1[i]<x1[j];

      y1[i]<y1[j];

      x2[i]>x2[j];

      y2[i]>y2[j];

     所以就可以写出cpp了:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,L,R,ans;
    struct nond{
        int x1,y1,x2,y2;
    }v[50010];
    int cmp(nond a,nond b){
        return a.x1<b.x1;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            int a,b,c,d;
            scanf("%d%d%d%d",&a,&b,&c,&d);
            v[i].x1=a;v[i].y1=b;v[i].x2=c;v[i].y2=d;
        }
        sort(v+1,v+1+n,cmp);ans=n;
        for(L=1,R=2;R<=n;R++){
            while(v[L].x2<=v[R].x1)    L++;
            for(int i=L;i<=R;i++)
                if(v[R].x1>v[i].x1&&v[R].y2<v[i].y2&&v[i].y1<v[R].y1&&v[i].x2>v[R].x2){ 
                    ans--;break;
                }
        }
        cout<<ans;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    《JavaScript高级程序设计》笔记:客户端检测(九)
    《JavaScript高级程序设计》笔记:BOM(八)
    《JavaScript高级程序设计》笔记:函数表达式(七)
    《JavaScript高级程序设计》笔记:面向对象的程序设计(六)
    小tips:JS的Truthy和Falsy(真值与假值)
    footer固定在页面底部的实现方法总结
    WEB前端需要了解的XML相关基础知识
    vuex最简单、最直白、最全的入门文档
    原生JS替代jQuery的各种方法汇总
    数据挖掘优秀工具对比
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8227967.html
Copyright © 2011-2022 走看看