hdu 3299

来源:互联网 发布:非洲有网络吗 编辑:程序博客网 时间:2024/05/29 04:34
#include<cstdio>#include<algorithm>using namespace std;struct point{    int x,y;    bool operator < (const point& rhs) const    {        return x<rhs.x;    }};const int maxn = 100+10;point p[maxn];int n,m,y[maxn],on[maxn],on2[maxn],left[maxn];int solve(){    sort(p,p+n);    sort(y,y+n);    m=unique(y,y+n)-y;    if(m<=2)        return n;    int ans=0;    for(int a=0;a<m;a++)        for(int b=a+1;b<m;b++)        {            int ymin=y[a],ymax=y[b];            int k=0;            for(int i=0;i<n;i++)            {                if(i==0 || p[i].x!=p[i-1].x)                {                    k++;                    on[k]=on2[k]=0;                    left[k]=k==0?0:left[k-1]+on2[k-1]-on[k-1];                }                if(p[i].y>ymin && p[i].y<ymax)                    on[k]++;                if(p[i].y>=ymin && p[i].y<=ymax)                    on2[k]++;            }            if(k<=2)                return n;            int M = 0;            for(int j=1;j<=k;j++)            {                ans=max(ans,left[j]+on2[j]+M);                M=max(M,on[j]-left[j]);            }        }        return ans;}int main(){    int kcase=0;    while(scanf("%d",&n)==1 && n)    {        for(int i=0;i<n;i++)        {            scanf("%d%d",&p[i].x,&p[i].y);            y[i]=p[i].y;        }        printf("Case %d: %d\n",++kcase,solve());    }    return 0;}

原创粉丝点击