建议看看王知昆dalao的论文,讲得很好

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int l, w, n, ans=0, sh, xi, ma;
struct Node{
int x, y;
}nd[5105];
bool cmp1(Node u, Node v){
return u.y<v.y;
}
bool cmp2(Node u, Node v){
if(u.x==v.x) return u.y<v.y;
return u.x<v.x;
}
int main(){
cin>>l>>w>>n;
for(int i=1; i<=n; i++)
scanf("%d %d", &nd[i].x, &nd[i].y);
nd[++n] = (Node){0, 0};
nd[++n] = (Node){l, 0};
nd[++n] = (Node){0, w};
nd[++n] = (Node){l, w};
sort(nd+1, nd+1+n, cmp1);
for(int i=1; i<n; i++)
ans = max(ans, (nd[i+1].y-nd[i].y)*l);
sort(nd+1, nd+1+n, cmp2);
for(int i=1; i<=n; i++){
sh = w; xi = 0; ma = l - nd[i].x;
for(int j=i+1; j<=n; j++)
if(nd[j].y<=sh && nd[j].y>=xi){
if(ma*(sh-xi)<=ans) break;
ans = max(ans, (nd[j].x-nd[i].x)*(sh-xi));
if(nd[j].y==nd[i].y) break;
else if(nd[j].y>nd[i].y) sh = nd[j].y;
else xi = nd[j].y;
}
sh = w; xi = 0; ma = nd[i].x;
for(int j=i-1; j>=1; j--){
if(nd[j].y<=sh && nd[j].y>=xi){
if(ma*(sh-xi)<=ans) break;
ans = max(ans, (nd[i].x-nd[j].x)*(sh-xi));
if(nd[j].y==nd[i].y) break;
else if(nd[j].y>nd[i].y) sh = nd[j].y;
else xi = nd[j].y;
}
}
}
cout<<ans<<endl;
return 0;
}

最新文章

  1. python面向对象编程
  2. maxiang conf
  3. Xamarin.IOS之多视图
  4. linux笔记:权限管理-sudo
  5. Android学习七:new Date使用
  6. C#...何时需要重写ToString()方法?
  7. C语言的变量的内存分配
  8. Asp.Net项目与TCP服务端交互
  9. dbus 消息和消息总线实例讲解-一
  10. Django Model模型的实战操作笔记
  11. delphi 的 LockType 锁类型
  12. Linux系统——Nginx反向代理与负载均衡
  13. perl6 Net::HTTP 不能发送https请求
  14. 为apache安装mod_wsgi的时候出现-fpic的问题
  15. php学习十四:抽象,接口和多态
  16. windows 10上利用Microsoft RTF文件(CVE-2017-0199)进行攻击
  17. Numpy 数据分析基础
  18. (转)linux shell 数字计算详解
  19. Java框架安全
  20. Delphi中CPort控件之Timeout属性

热门文章

  1. iOS 面试常问之多线程
  2. Flat UI theme--扁平化的UI
  3. Beta_版本发布
  4. 升级CentOS内核 - 2.6升级到3.10/最新内核
  5. OSSIM安装与使用感受
  6. 【Python图像特征的音乐序列生成】关于音乐生成的思路转变
  7. ABAP和Java的单元测试Unit Test
  8. UVA 11552 Fewest Flops(区间dp)
  9. 跑edgebox
  10. Java制作桌面弹球下载版 使用如鹏游戏引擎制作 包含2个精灵球同时弹动