#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 5010
using namespace std;
int l,w,n;
struct node
{
int x,y;
}pt[N];
int cmp(node a,node b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int cmp2(node a,node b)
{
if(a.y==b.y)return a.x<b.x;
return a.y>b.y;
}
int main()
{
scanf("%d%d%d",&l,&w,&n);
if(!n){printf("%d\n",l*w);return 0;}
for(int i=1;i<=n;i++)scanf("%d%d",&pt[i].x,&pt[i].y);
sort(pt+1,pt+n+1,cmp);
int ans=-1;
for(int i=1;i<=n;i++)
{
int u=w,d=0;
for(int j=i+1;j<=n;j++)
{
ans=max(ans,(pt[j].x-pt[i].x)*(u-d));
if(pt[j].y>=pt[i].y)u=min(u,pt[j].y);
if(pt[j].y<=pt[i].y)d=max(d,pt[j].y);
}
ans=max(ans,(l-pt[i].x)*(u-d));
}
for(int i=n;i>=1;i--)
{
int u=w,d=0;
for(int j=i-1;j>=1;j--)
{
ans=max(ans,(pt[i].x-pt[j].x)*(u-d));
if(pt[j].y>=pt[i].y)u=min(u,pt[j].y);
if(pt[j].y<=pt[i].y)d=max(d,pt[j].y);
}
ans=max(ans,pt[i].x*(u-d));
}
sort(pt+1,pt+n+1,cmp2);
for(int i=1;i<n;i++)
{
ans=max(ans,(pt[i].y-pt[i+1].y)*l);
}
ans=max(ans,(w-pt[1].y)*l);
ans=max(ans,pt[n].y*l);
printf("%d\n",ans);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wzq_qwq/article/details/47167399