同样题目 Hdu-3695 http://acm.hdu.edu.cn/showproblem.php?pid=3299
Uva-3695 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1696
先贴代码吧。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=101;
struct node
{
int x,y;
bool operator < (const node &a)const
{
if(x==a.x)
return y<a.y;
return x<a.x;
}
}a[maxn];
int n,y[maxn],on[maxn],ona[maxn],col[maxn];
int GetAns()
{
sort(a,a+n);
sort(y,y+n);
int len=unique(y,y+n)-y,ans=0,cou=0;
if(len<=2)
return n;
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
{
int miny=y[i],maxy=y[j];
cou=0;
for(int k=0;k<n;k++)
{
if(k==0||a[k].x!=a[k-1].x)
{
cou++;
on[cou]=ona[cou]=0;
col[cou]=cou==0?0:col[cou-1]+ona[cou-1]-on[cou-1];
}
if(a[k].y>miny&&a[k].y<maxy)
on[cou]++;
if(a[k].y>=miny&&a[k].y<=maxy)
ona[cou]++;
}
if(cou<=2)
return n;
int M=0;
for(int k=1;k<=cou;k++)
{
ans=max(ans,col[k]+ona[k]+M);
M=max(M,on[k]-col[k]);
}
}
return ans;
}
int main()
{
int cas=1,ans;
while(scanf("%d",&n)&&n)
{
ans=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
y[i]=a[i].y;
}
int ans=GetAns();
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}