P1578 奶牛浴场

题目描述

由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少。为了讨好奶牛,John决定在牛场中建造一个大型浴场。但是John的奶牛有一个奇怪的习惯,每头奶牛都必须在牛场中的一个固定的位置产奶,而奶牛显然不能在浴场中产奶,于是,John希望所建造的浴场不覆盖这些产奶点。这回,他又要求助于Clevow了。你还能帮助Clevow吗?

John的牛场和规划的浴场都是矩形。浴场要完全位于牛场之内,并且浴场的轮廓要与牛场的轮廓平行或者重合。浴场不能覆盖任何产奶点,但是产奶点可以位于浴场的轮廓上。

Clevow当然希望浴场的面积尽可能大了,所以你的任务就是帮她计算浴场的最大面积。

输入输出格式

输入格式:

输入文件的第一行包含两个整数L和W,分别表示牛场的长和宽。文件的第二行包含一个整数n,表示产奶点的数量。以下n行每行包含两个整数x和y,表示一个产奶点的坐标。所有产奶点都位于牛场内,即:0<=x<=L,0<=y<=W。

输出格式:

输出文件仅一行,包含一个整数S,表示浴场的最大面积。

输入输出样例

输入样例#1:

  1. 10 10
  2. 4
  3. 1 1
  4. 9 1
  5. 1 9
  6. 9 9
输出样例#1:

  1. 80

说明

0<=n<=5000

1<=L,W<=30000

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int maxn = ;
  6.  
  7. inline int read() {
  8. int x = ,f = ;
  9. char ch = getchar();
  10. while(ch < '' || ch > '') {
  11. if(ch == '-') f = -;
  12. ch = getchar();
  13. }
  14. while(ch >='' && ch<='') {
  15. x = (x << ) + (x << ) + (ch ^ );
  16. ch = getchar();
  17. }
  18. return x * f;
  19. }
  20.  
  21. struct node {
  22. int x,y;
  23. } Point[maxn]; //横纵坐标表示一个点
  24.  
  25. inline bool cmpX(node a,node b) {
  26. return a.x < b.x;
  27. } //按纵坐标排序
  28.  
  29. inline bool cmpY(node a,node b) {
  30. return a.y < b.y;
  31. } //按横坐标排序
  32.  
  33. int L,W,n,res;
  34.  
  35. int main() {
  36. L = read(),W=read(),n=read();
  37. for(int i = ; i <= n; ++i) Point[i].x = read(),Point[i].y = read();
  38. Point[++n].x = ,Point[n].y = ; //手动添加(0,0)这个点
  39. Point[++n].x = L,Point[n].y = ; //手动添加(L,0)这个点
  40. Point[++n].x = ,Point[n].y = W; //手动添加(0,W)这个点
  41. Point[++n].x = L,Point[n].y = W; //手动添加(L,W)这个点
  42. sort(Point + ,Point + n + ,cmpX); //按横坐标排序
  43. for(int i = ; i <= n; ++i) {
  44. int High = W,Low = ,Wid = L - Point[i].x; //High 是上边界 Low 是下边界 Wid-> Width 是向右扫描时理想最大宽度
  45. for(int j = i + ; j <= n; ++j) { //向右扫描
  46. if(res >= Wid * (High - Low)) break; //矩形面积,如果当前构成的矩形都不如答案优,那么就不用更新答案和边界了
  47. res = max(res,(Point[j].x - Point[i].x) * (High - Low)); //如果更优,那么更新答案
  48. if(Point[j].y == Point[i].y) break; //纵坐标相同那么在同一水平直线上 不用更新边界
  49. if(Point[j].y > Point[i].y) High = min(High,Point[j].y); //如果比当前点高,更新上边界
  50. if(Point[j].y < Point[i].y) Low = max(Low,Point[j].y);
  51. }
  52. High = W,Low = ,Wid = Point[i].x; //High 是上边界 Low 是下边界 Wid-> Width 是向左扫描时理想最大宽度
  53. for(int j = i - ; j >= ; --j) { //向左扫描
  54. if(res >= Wid * (High - Low)) break;
  55. res = max(res,(Point[i].x - Point[j].x) * (High - Low)); //除了这里是反着的其余和向右扫一样
  56. if(Point[i].y == Point[j].y) break;
  57. if(Point[j].y > Point[i].y) High = min(High,Point[j].y);
  58. if(Point[j].y < Point[i].y) Low = max(Low,Point[j].y);
  59. }
  60. }
  61. sort(Point + ,Point + n + ,cmpY); //按纵坐标排序开始计算横着一条的子矩形面积
  62. for(int i = ; i <= n - ; ++i) res = max(res,(Point[i+].y - Point[i].y) * L); //更新答案
  63. printf("%d\n",res);
  64. return ;
  65. }

P1578 奶牛浴场的更多相关文章

  1. 洛谷P1578 奶牛浴场

    P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...

  2. [WC2002][洛谷P1578]奶牛浴场

    洛谷题解里那个人可真是话多呢. 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每 ...

  3. 洛谷 P1578 奶牛浴场

    https://www.luogu.org/problemnew/show/P1578 题解 另外这题有一些小坑,洛谷的题解里面有讲 #pragma GCC optimize("Ofast& ...

  4. 洛谷 P1578 奶牛浴场 —— 最大子矩形

    题目:https://www.luogu.org/problemnew/show/P1578 枚举左边界,向右枚举右边界,同时不断限制上下边界,最后右边界是整个图的边界: 由于没有做左边界是整个图的边 ...

  5. luogu P1578 奶牛浴场

    很好的一道题 王知昆爷爷的论文(讲的特别清楚) https://wenku.baidu.com/view/bc8311f69e314332396893f7.html 先贴上AC代码 #include& ...

  6. 【Luogu】P1578奶牛浴场(DP,枚举)

    题目链接 枚举极大子矩形.详情请见本题题解:I_AM_HelloWord 代码如下 #include<cstdio> #include<cctype> #include< ...

  7. P1578 奶牛浴场 有障碍点的最大子矩形

    这题咕咕了很久终于写了\(QwQ\) 思路:扫? 提交:2次 错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\). 题解: 显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合 ...

  8. 洛谷 P1578 奶牛浴场 题解

    题面 1.定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的子矩形.如图所示,第一个是有效子矩形(尽管边界上有障碍点),第二个不是有效子矩形(因为内部含有障碍点). 2.极大有效子矩形:一个有效 ...

  9. 洛谷 [P1578] WC2002 奶牛浴场

    本题是一道用极大化思想求最大子矩阵的经典题目.这个题目很出名,可以在百度搜索王知昆国家队dalao的论文,其中说的非常详细. 先枚举极大子矩形的左边界,然后从左到右依次扫描每一个障碍点,并不断修改可行 ...

随机推荐

  1. 重构JS代码 - 让JS代码平面化

    js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url', jsonObj, function ...

  2. Python从菜鸟到高手(7):字符串

    1. 单引号字符串和转义符   字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了 ...

  3. java 一次CPU占用过高问题的排查及解决

    最近一段时间  某台服务器上的一个应用总是隔一段时间就自己挂掉      用top看了看  从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...

  4. python中Metaclass的理解

    今天在学习<python3爬虫开发实战>中看到这样一段代码3 class ProxyMetaclass(type): def __new__(cls, name, bases, attrs ...

  5. java web 常见异常及解决办法

    javax.servlet.ServletException: javax/servlet/jsp/SkipPageException 重启tomcat, javax.servlet.ServletE ...

  6. echarts使用笔记一:基本属性

    1.包括一些基本的设置 app.title = '坐标轴刻度与标签对齐'; option = { title : { //标题 x : 'center', y : 5, text : '单通趋势图' ...

  7. 09-babel

    这个是解析我们es6的代码的,为什么要用它呢,因为对于一些ie浏览器,甚至FF浏览器,低版本的还不能识别我们的es6代码,那么vue里面好多还让我们去写es6的代码,这个时候我们就可以用babel这个 ...

  8. PHPer未来路在何方...

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...

  9. JMeter压测分布式部署

    监控JMeter压力机的性能

  10. 项目中常用的MySQL 优化

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...