P1578 奶牛浴场
P1578 奶牛浴场
题目描述
由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少。为了讨好奶牛,John决定在牛场中建造一个大型浴场。但是John的奶牛有一个奇怪的习惯,每头奶牛都必须在牛场中的一个固定的位置产奶,而奶牛显然不能在浴场中产奶,于是,John希望所建造的浴场不覆盖这些产奶点。这回,他又要求助于Clevow了。你还能帮助Clevow吗?
John的牛场和规划的浴场都是矩形。浴场要完全位于牛场之内,并且浴场的轮廓要与牛场的轮廓平行或者重合。浴场不能覆盖任何产奶点,但是产奶点可以位于浴场的轮廓上。
Clevow当然希望浴场的面积尽可能大了,所以你的任务就是帮她计算浴场的最大面积。
输入输出格式
输入格式:
输入文件的第一行包含两个整数L和W,分别表示牛场的长和宽。文件的第二行包含一个整数n,表示产奶点的数量。以下n行每行包含两个整数x和y,表示一个产奶点的坐标。所有产奶点都位于牛场内,即:0<=x<=L,0<=y<=W。
输出格式:
输出文件仅一行,包含一个整数S,表示浴场的最大面积。
输入输出样例
10 10
4
1 1
9 1
1 9
9 9
80
说明
0<=n<=5000
1<=L,W<=30000
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
inline int read() {
int x = ,f = ;
char ch = getchar();
while(ch < '' || ch > '') {
if(ch == '-') f = -;
ch = getchar();
}
while(ch >='' && ch<='') {
x = (x << ) + (x << ) + (ch ^ );
ch = getchar();
}
return x * f;
}
struct node {
int x,y;
} Point[maxn]; //横纵坐标表示一个点
inline bool cmpX(node a,node b) {
return a.x < b.x;
} //按纵坐标排序
inline bool cmpY(node a,node b) {
return a.y < b.y;
} //按横坐标排序
int L,W,n,res;
int main() {
L = read(),W=read(),n=read();
for(int i = ; i <= n; ++i) Point[i].x = read(),Point[i].y = read();
Point[++n].x = ,Point[n].y = ; //手动添加(0,0)这个点
Point[++n].x = L,Point[n].y = ; //手动添加(L,0)这个点
Point[++n].x = ,Point[n].y = W; //手动添加(0,W)这个点
Point[++n].x = L,Point[n].y = W; //手动添加(L,W)这个点
sort(Point + ,Point + n + ,cmpX); //按横坐标排序
for(int i = ; i <= n; ++i) {
int High = W,Low = ,Wid = L - Point[i].x; //High 是上边界 Low 是下边界 Wid-> Width 是向右扫描时理想最大宽度
for(int j = i + ; j <= n; ++j) { //向右扫描
if(res >= Wid * (High - Low)) break; //矩形面积,如果当前构成的矩形都不如答案优,那么就不用更新答案和边界了
res = max(res,(Point[j].x - Point[i].x) * (High - Low)); //如果更优,那么更新答案
if(Point[j].y == Point[i].y) break; //纵坐标相同那么在同一水平直线上 不用更新边界
if(Point[j].y > Point[i].y) High = min(High,Point[j].y); //如果比当前点高,更新上边界
if(Point[j].y < Point[i].y) Low = max(Low,Point[j].y);
}
High = W,Low = ,Wid = Point[i].x; //High 是上边界 Low 是下边界 Wid-> Width 是向左扫描时理想最大宽度
for(int j = i - ; j >= ; --j) { //向左扫描
if(res >= Wid * (High - Low)) break;
res = max(res,(Point[i].x - Point[j].x) * (High - Low)); //除了这里是反着的其余和向右扫一样
if(Point[i].y == Point[j].y) break;
if(Point[j].y > Point[i].y) High = min(High,Point[j].y);
if(Point[j].y < Point[i].y) Low = max(Low,Point[j].y);
}
}
sort(Point + ,Point + n + ,cmpY); //按纵坐标排序开始计算横着一条的子矩形面积
for(int i = ; i <= n - ; ++i) res = max(res,(Point[i+].y - Point[i].y) * L); //更新答案
printf("%d\n",res);
return ;
}
P1578 奶牛浴场的更多相关文章
- 洛谷P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- [WC2002][洛谷P1578]奶牛浴场
洛谷题解里那个人可真是话多呢. 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每 ...
- 洛谷 P1578 奶牛浴场
https://www.luogu.org/problemnew/show/P1578 题解 另外这题有一些小坑,洛谷的题解里面有讲 #pragma GCC optimize("Ofast& ...
- 洛谷 P1578 奶牛浴场 —— 最大子矩形
题目:https://www.luogu.org/problemnew/show/P1578 枚举左边界,向右枚举右边界,同时不断限制上下边界,最后右边界是整个图的边界: 由于没有做左边界是整个图的边 ...
- luogu P1578 奶牛浴场
很好的一道题 王知昆爷爷的论文(讲的特别清楚) https://wenku.baidu.com/view/bc8311f69e314332396893f7.html 先贴上AC代码 #include& ...
- 【Luogu】P1578奶牛浴场(DP,枚举)
题目链接 枚举极大子矩形.详情请见本题题解:I_AM_HelloWord 代码如下 #include<cstdio> #include<cctype> #include< ...
- P1578 奶牛浴场 有障碍点的最大子矩形
这题咕咕了很久终于写了\(QwQ\) 思路:扫? 提交:2次 错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\). 题解: 显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合 ...
- 洛谷 P1578 奶牛浴场 题解
题面 1.定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的子矩形.如图所示,第一个是有效子矩形(尽管边界上有障碍点),第二个不是有效子矩形(因为内部含有障碍点). 2.极大有效子矩形:一个有效 ...
- 洛谷 [P1578] WC2002 奶牛浴场
本题是一道用极大化思想求最大子矩阵的经典题目.这个题目很出名,可以在百度搜索王知昆国家队dalao的论文,其中说的非常详细. 先枚举极大子矩形的左边界,然后从左到右依次扫描每一个障碍点,并不断修改可行 ...
随机推荐
- 体验usually.js的管道函数——pipe函数
体验usually.js的管道函数——pipe函数 usually.js 是一个面向现代 Web 开发的 JavaScript 函数库,基于 ES6 开发.最新版本2.4.1,最新版本usually. ...
- android linux 传文件
EStrongs File Explorer 即: Es文件浏览器 网络 -> 远程管理器 设置 ->设置根目录 linux 使用浏览器访问即可.
- Linux命令(一)
需要用Xshell连接Linux时: 先在终端输入命令:service sshd start(开启ssh服务) 1.netstat -tnl:查看端口状态的命令(如 查看22端口) 2.servi ...
- ajax成功后XML 解析错误:格式不佳
就是Ajax发送请求后,意图回显数据时会出现这个错误,貌似chrome浏览器不会报用火狐能看到: 可能的原因有两个,就是后台应该返回一个json格式的字符串,但是你返回的是浏览器看不懂的,也就是返回格 ...
- 【评分】Beta 答辩总结
[评分]Beta 答辩总结 总结 按时交 - 有分 晚交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 倒扣本次作业分数 由于前期不够重视,到beta评分才发现有5组的代码提交仅由一人&qu ...
- NFV组播实验对照
一 论文题目:Approximation and Online Algorithms for NFV-Enabled Multicasting in SDNs 发表时间:2017 期刊来源:Inter ...
- R语言绘制QQ图
无论是直方图还是经验分布图,要从比较上鉴别样本是否处近似于某种类型的分布是困难的 QQ图可以帮我们鉴别样本的分布是否近似于某种类型的分布 R语言,代码如下: > qqnorm(w);qqline ...
- 写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接内容的本地查询
始出处:http://www.cnblogs.com/Charltsing/p/APIViewer.html QQ:564955427,QQ群:550672198 世面上的API Viewer已经不少 ...
- openstack-KVM-Memory
一.Memory 1.查看memory信息 free -g cat /proc/meminfo dmesg | grep Memory 2.xml文件中的内存信息: vim /etc/libvirt/ ...
- MyBatis使用注解开发