zoukankan      html  css  js  c++  java
  • Cow Rectangles

    Cow Rectangles

    题目描述

    The locations of Farmer John's N cows (1 <= N <= 500) are described by distinct points in the 2D plane.  The cows belong to two different breeds: Holsteins and Guernseys.  Farmer John wants to build a rectangular fence with sides parallel to the coordinate axes enclosing only Holsteins, with no Guernseys (a cow counts as enclosed even if it is on the boundary of the fence).  Among all such fences, Farmer John wants to build a fence enclosing the maximum number of Holsteins.  And among all these fences, Farmer John wants to build a fence of minimum possible area.  Please determine this area.  A fence of zero width or height is allowable.

    输入

    The first line of input contains N.  Each of the next N lines describes a cow, and contains two integers and a character. The integers indicate a point (x,y) (0 <= x, y <= 1000) at which the cow
    is located. The character is H or G, indicating the cow's breed.  No two cows are located at the same point, and there is always at least one Holstein.

    输出

    Print two integers. The first line should contain the maximum number of Holsteins that can be enclosed by a fence containing no Guernseys, and second line should contain the minimum area enclosed by such a fence.

    样例输入

    5
    1 1 H
    2 2 H
    3 3 G
    4 4 H
    6 6 H
    

    样例输出

    2
    1
    分析:答案的矩形四个边界必然有H型牛;
       所以可以枚举上下边界,对于左右边界双指针更新答案,复杂度O(N³);
       注意要排除边界上G型牛;

    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define vi vector<int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    #define pii pair<int,int>
    #define Lson L, mid, rt<<1
    #define Rson mid+1, R, rt<<1|1
    const int maxn=1e3+10;
    const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    int n,m,k,t,y[maxn],ans[2];
    struct node
    {
        int x,y,z;
        bool operator<(const node&p)const
        {
            if(x==p.x)return z<p.z;
            else return x<p.x;
        }
    }a[maxn];
    char b[10];
    int main()
    {
        int i,j;
        scanf("%d",&n);
        rep(i,0,n-1){
            scanf("%d%d%s",&a[i].x,&a[i].y,b);
            if(b[0]=='H')a[i].z=1,y[m++]=a[i].y;;
        }
        sort(a,a+n);
        sort(y,y+m);
        int num=unique(y,y+m)-y;
        rep(i,0,num-1)rep(j,i,num-1)
        {
            int l=-1,r,now=0,flag=-1;
            rep(k,0,n-1)
            {
                if(a[k].y>=y[i]&&a[k].y<=y[j])
                {
                    if(!a[k].z)
                    {
                        flag=a[k].x;
                        if(now>ans[0]||(now==ans[0]&&(r-l)*(y[j]-y[i])<ans[1]))
                        {
                            ans[0]=now;
                            ans[1]=(r-l)*(y[j]-y[i]);
                        }
                        now=0,l=-1;
                    }
                    else
                    {
                        if(a[k].x==flag)continue;
                        now++;
                        if(l!=-1)r=a[k].x;
                        else l=a[k].x,r=a[k].x;
                    }
                }
            }
            if(now>ans[0]||(now==ans[0]&&(r-l)*(y[j]-y[i])<ans[1]))
            {
                ans[0]=now;
                ans[1]=(r-l)*(y[j]-y[i]);
            }
        }
        printf("%d
    %d
    ",ans[0],ans[1]);
        //system("Pause");
        return 0;
    }
  • 相关阅读:
    python 全栈开发,Day34(基于UDP协议的socket)
    python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
    python 全栈开发,Day32(知识回顾,网络编程基础)
    python 全栈开发,Day30(第一次面向对象考试)
    python 全栈开发,Day30(纸牌游戏,异常和错误,异常处理)
    python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)
    python 全栈开发,Day28(复习,os模块,导入模块import和from)
    python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)
    python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)
    css关系选择符
  • 原文地址:https://www.cnblogs.com/dyzll/p/5796471.html
Copyright © 2011-2022 走看看