这题咕咕了很久终于写了\(QwQ\)


思路:扫?

提交:2次

错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\)。

题解:

显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合。

细节见代码(及注释)

#include<cstdio>
#include<iostream>
#include<algorithm>
#define ull unsigned long long
#define ll long long
#define R register int
using namespace std;
#define pause (for(R i=1;i<=10000000000;++i))
#define In freopen("NOIPAK++.in","r",stdin)
#define Out freopen("out.out","w",stdout)
namespace Fread {
static char B[1<<15],*S=B,*D=B;
#ifndef JACK
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
#endif
inline int g() {
R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
if(ch==EOF) return EOF; do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
} inline bool isempty(const char& ch) {return (ch<=36||ch>=127);}
inline void gs(char* s) {
register char ch; while(isempty(ch=getchar()));
do *s++=ch; while(!isempty(ch=getchar()));
}
} using Fread::g; using Fread::gs;
namespace Luitaryi {
const int N=5010;
struct node { int x,y;
inline bool operator <(const node& that) const {return x==that.x?y<that.y:x<that.x;}//按横坐标排序
inline bool operator >(const node& that) const {return y==that.y?x<that.x:y<that.y;}//按纵坐标排序
}a[N];
int n,m,cnt,ans;
inline void main() {
n=g(),m=g(),cnt=g();
for(R i=1;i<=cnt;++i) a[i].x=g(),a[i].y=g();
a[++cnt].x=0,a[cnt].y=0,a[++cnt].x=n,a[cnt].y=m,
a[++cnt].x=0,a[cnt].y=m,a[++cnt].x=n,a[cnt].y=0;//把四个角也当做障碍点,为的是考虑与边界重合的情况
sort(a+1,a+cnt+1);//按横坐标排序
for(R i=1;i<=cnt;++i) {
R up=m,dn=0,w=n-a[i].x;//up:上界,dn:下界,w:可以向右延伸的最大宽度
for(R j=i+1;j<=cnt;++j) {
if(ans>w*(up-dn)) break;//一个小剪枝
ans=max(ans,(a[j].x-a[i].x)*(up-dn));
if(a[i].y==a[j].y) break;//同样高度就不必向右继续扫描
//(此时矩形已经成为了一条线了,但就算你不把它看成线,过这条线且以a[i]为左边界的子矩形也一定不优(可以往左扩))
if(a[i].y<a[j].y) up=min(a[j].y,up);//更新上下界
if(a[i].y>a[j].y) dn=max(a[j].y,dn);
} up=m,dn=0,w=a[i].x;
for(R j=i-1;j;--j) {
if(ans>w*(up-dn)) break;
ans=max(ans,(a[i].x-a[j].x)*(up-dn));
if(a[i].y==a[j].y) break;
if(a[i].y<a[j].y) up=min(a[j].y,up);
if(a[i].y>a[j].y) dn=max(a[j].y,dn);
}
}//此时已经处理完正常情况和与大矩形上下边界重合的情况
sort(a+1,a+cnt+1,greater<node>());//按纵坐标排序
for(R i=1;i<cnt;++i) ans=max(ans,(a[i+1].y-a[i].y)*n);//处理与大矩形左右边界重合的情况
printf("%d\n",ans);
}
}
signed main() {
Luitaryi::main(); return 0;
}

2019.07.23

最新文章

  1. H5 本地存储一
  2. 托管到github上的网页图片在百度浏览器中显示不全
  3. 完数[HDU1406]
  4. jquery easy ui 1.3.4 表单(7)
  5. ubuntu下搭建cocos2dx编程环境-上
  6. PHP 类中的常量
  7. 续前篇---数据挖掘之聚类算法k-mediod(PAM)原理及实现
  8. 解决“无法连接到Python代码运行助手。请检查本机的设置”问题
  9. Cocos2d-x 2.3.3版本 FlappyBird
  10. bzoj4008: [HNOI2015]亚瑟王【期望dp】
  11. 蓝桥网试题 java 基础练习 数列特征
  12. 通过ssh远程ipython notebook登录使用服务器
  13. 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建
  14. Python——爬虫——爬虫的原理与数据抓取
  15. 《剑指Offer》第20题(Java实现):定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
  16. 超恶心的TP模版取值
  17. windows下 navicat_premium破解方法
  18. BZOJ1078 [SCOI2008]斜堆 堆
  19. springboot activiti 配置项详解
  20. WebView长按保存图片;WebView不跳转到系统的浏览器;WebView加载显示进度条;WebView返回事件处理;

热门文章

  1. Win10 鼠标右键新建菜单添加自定义文件
  2. kettle工具的介绍和使用
  3. ajax post上传数据时,前端出现的跨域权限问题:ccess to XMLHttpRequest at ‘’rom origin &#39;null&#39; has been blocked by CORS policy: Response to preflight request doesn&#39;t pass access control check: It does not have HTTP ok st
  4. 12.2备库rman使用delete删除归档日志报错RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process
  5. 怎样修改原型对象prototype
  6. 如何查看浏览器保存的密码——通过js代码的方式
  7. (二)Redis之Jedis概念和HelloWorld实现以及JedisPool的使用
  8. 查准率(precision)和查全率(recall)
  9. VUE.js devtool 安装简易教程(转)
  10. MySQL高版本默认密码查找