Buildings

Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5301


Mean:

n*m列的网格,删除一个格子x,y,用矩形来填充矩阵。且矩形至少有一边是在矩阵的边缘上。

要使最大矩形的面积最小,求满足条件的矩形填充方式中面积最大的矩形。

analyse:

任何矩形都可以分为宽度为1的小矩形,所以只考虑矩形的可以的最小长度即可。

讨论:

不删除格子时:最小长度为min((n+1)/2,(m+1)/2) = len

n = m:

n为奇数,且当x,y在正中心的时候,len- 1即可

其他条件len不变 , 显然成立。

n != m:

如果n > m swap(n,m), swap(x,y)

由于对称性,把矩阵分为四块,把x,y变换到矩阵的右上角。

可以知道 删除点后len只能变大不能变小。

且即使增大不会大于 (m+1)/2。

0 0 0 0 0 0 0 0 0 00 x 0 0 0 0 0 0 0 01 3 0 0 0 0 0 0 0 00 2 0 0 0 0 0 0 0 0

如图:x下方的3必须被矩形覆盖,那么长度 为 min(1 到3的长度,2到3的长度)

然后取min((m+1)/2, max(len,min(1-->3,2-->3)))即可。

Time complexity: O(N)

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-07-23-18.23
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define  LL long long
#define  ULL unsigned long long
using namespace std;

int main()
{
     ios_base::sync_with_stdio( false );
     cin.tie( 0 );
     int n, m, x, y;
     while( cin >> n >> m >> x >> y )
     {
           int max1, max2, max3, max4, maxn;
           max1 = max2 = max3 = max4 = maxn = 0;
           max1 = min( min( n - x + 1, x ), m - y );
           max2 = min( min( n - x + 1, x ), y - 1 );
           max3 = min( min( m - y + 1, y ), n - x );
           max4 = min( min( m - y + 1, y ), x - 1 );
           maxn = max( max( max1, max2 ), max( max3, max4 ) );
//            if(n<m) swap(n,m),swap(x,y);
//            maxn=min(max(x-1,n-x), min(m-y+1,y));
           if( ( m == n ) && ( m % 2 == 1 ) )
           {
                 if( ( x == y ) && x == ( ( m + 1 ) / 2 ) )
                 {
                       cout << m / 2 << endl;
                       continue;
                 }
                 cout << max( maxn, ( m + 1 ) / 2 ) << endl;
                 continue;
           }
           int minn = min( n, m );
           cout << max( maxn, ( minn + 1 ) / 2 ) << endl;
     }
     return 0;
}
/*

*/

2015 Multi-University Training Contest 2 1002 Buildings相关推荐

  1. 2015 Multi-University Training Contest 1 - 1002 Assignment

    Assignment Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值 ...

  2. 2017 Multi-University Training Contest - Team 7:1002. Build a tree(递归)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  3. HUST-2015 Multi-University Training Contest 9

    2015 Multi-University Training Contest 9 solutions BY xudyh 1001.Expression 记dp_{l,r}dp​l,r​​表示l,rl, ...

  4. 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard(...)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  5. 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  6. 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  7. 2017 Multi-University Training Contest - Team 7:1011. Kolakoski(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  8. 2017 Multi-University Training Contest - Team 7:1005. Euler theorem(答案是(n+3)/2)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard 2017 Multi-Univer ...

  9. 2016 Multi-University Training Contest 10

    solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...

最新文章

  1. linux驱动:音频驱动(六)ASoc之codec设备
  2. Oracle后台进程
  3. python的安装教程-python安装教程
  4. RabbitMQ 消息确认机制 以及 原理解析
  5. 论文阅读:An Enhanced Deep Feature Representation for Person Re-identification
  6. wxWidgets:键码KeyCodes
  7. 战斗机嵌入式训练系统中的智能虚拟陪练
  8. NamingException
  9. drupal_Drupal,物联网和开放式硬件的交集
  10. DoYourData Start Menu for Mac界面介绍使用指南
  11. PingInfoView,中文,以及ping包+描述的使用。
  12. 【STM32F429】第5章 ThreadX NetXDUO网络协议栈介绍
  13. 【《系统集成项目管理工程师》必备100题】
  14. java pem 签名,用Java实现RSA加解密及签名和验签(1)——.pem文件格式秘钥
  15. 向量叉乘判断顺时针还是逆时针
  16. win10系统日语输入法只能打出英文字母无法切换微软输入法无法使用
  17. 华为第十届 关灯计划
  18. 【图形学】计算机图形学-练习题7
  19. SVN如何本地拉取项目
  20. 每日TED What we don't understand about trust

热门文章

  1. ldconfig命令详解,linux动态链接库
  2. PHP更新数据库记录
  3. 自定义GridView分页模板
  4. nginx源码分析--内存对齐处理
  5. 设计模式之简单工厂模式(Simply Factory)摘录
  6. spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?
  7. mysql使用sha256密码,MySQL5.6启用sha256_password插件
  8. python窗口显示图片imread() imshow()_Python-OpenCV学习之imread,imshow
  9. mysql导入600万数据_mysql如何导出600万条记录的数据表?
  10. python将string转换为json_python -- 将string转换成dict的方法