题意:有一个包含n*m个格子的矩阵,其中有一个格子已经被染黑,现在要拿一些矩形来填充矩阵,不能填充到黑格子,但是每一个填充进去的矩形都必须至少有一条边紧贴在矩阵的边缘(4条边)的。用于填充的矩形其中最大面积的一个的面积大小为B,要使得B最小,如何填充?

思路:

  由于每个格子(除了黑格子)都必须被覆盖到,而且又要面积尽量小,那么最小就是宽为1的矩形了,只是长应该是多少?如果给的是个长方形矩阵,当没有黑格子时,大概只要宽的一半就可以了吧?可是就是有了黑格子,为了找个坑,必须给个黑格子,不然也太简单了吧?

  首先要知道最中间那部分必须覆盖到,所以当无黑格子时,无论是长方还是正方矩阵,所用最大矩形的长至少要满足 wid/2才行。由于黑格子的存在,情况可能有变数,比如刚好坐落于wid/2的偏左一点,再加上height很大的话,wid/2不够用了。看下图:

          1                            
          2                            
          3                            
          4                            
          5                            
          6                            
          7                            
          8                            
          9                            
          10                            
          11                            
          12                            
1 2 3 4 5 x * * * * * * * * * * * * * *
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       

  考虑上面50*20的矩阵,假如x是黑格子,那么答案还是wid/2=20/2=10吗??黄色的那4个玩意谁来覆盖?上方的又太远,下方又更远。

  为了保证有人能覆盖到那片黄色区域,要么是右边的来覆盖,要么是上边的来覆盖,看谁近咯!这样还不够,可能距离上方只是2而已,距离右边是16,那么被我们选的是2,怎么可能够用呢?所以最小还得保证是宽的一半以上。

  看代码吧。

 #include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=; int main()
{
freopen("e://input.txt", "r", stdin);
int n, m, x, y, ans;
while(~scanf("%d%d%d%d",&n,&m,&x,&y))
{
if(n>m) swap(n,m),swap(x,y);//记得x和n是配套的。保证n<=m
if(n==m && n& && x==y && x==(n+)/ ) //在正方形中央
ans=x-;
else //长方形,不用管黑点在哪
{
int t=min( y, m-y+ ); //长:取小的一段
int r=max( x-, n-x ); //宽:取长的一段。
ans=min(t,r); //两种方式取短者
ans=max(ans, (n+)/ ); //绝对不允许少于宽的一半
}
printf("%d\n",ans);
}
return ;
}

AC代码

HDU 5301 Buildings 建公寓(逻辑,水)的更多相关文章

  1. HDU 5301 Buildings 数学

    Buildings 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5301 Description Your current task is to m ...

  2. hdu 5301 Buildings (2015多校第二场第2题) 简单模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子 ...

  3. HDU - 5301 Buildings

    Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...

  4. HDU 5301 Buildings(2015多校第二场)

    Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  5. 2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题

    Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  6. bzoj4302 Hdu 5301 Buildings

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4302 [题解] 出自2015多校-学军 题意大概是给出一个n*m的格子有一个格子(x,y)是 ...

  7. HDU 2096 小明A+B --- 水题

    HDU 2096 /* HDU 2096 小明A+B --- 水题 */ #include <cstdio> int main() { #ifdef _LOCAL freopen(&quo ...

  8. 数学 HDOJ 5301 Buildings

    题目传送门 /* 题意:n*m列的矩阵,删除一个格子x,y.用矩形来填充矩阵.且矩形至少有一边是在矩阵的边缘上. 求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小. 分析:任何矩形 ...

  9. HDOJ/HDU 2560 Buildings(嗯~水题)

    Problem Description We divide the HZNU Campus into N*M grids. As you can see from the picture below, ...

随机推荐

  1. CSS基础知识学习笔记

    1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...

  2. Matlab实现求a到b被c整除的个数

    我先想到的是for循环........ 然后sum(find(mod(a:b,c)==0)),从10到100得到874,为什么不对呢? 比如a = [1 2 3 4  2 3 4 2],find(a= ...

  3. oracle——session

    一.解释session web应用中,session是服务器段保存用户信息的一个对象,cookie是浏览器端保存用户信息的对象.今天了解了oracle也有session对象,那么什么是oracle的s ...

  4. PHP读取xml方法讲解

    一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Marku ...

  5. linux cmake 安装mysql5.5.11,以及更高版本

    1.下载mysql5.5.12和cmake wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.12-linux2.6-i686.tar.gz ...

  6. Firefox下网页缩放时防止div被挤到下一层

    http://wu110cheng.blog.163.com/blog/static/13334965420121120102439190/ Firefox下网页缩放时防止div被挤到下一层 问题:三 ...

  7. POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)

    #include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...

  8. kmeans理解

    最近看到Andrew Ng的一篇论文,文中用到了Kmeans和DL结合的思想,突然发现自己对ML最基本的聚类算法都不清楚,于是着重的看了下Kmeans,并在网上找了程序跑了下. kmeans是unsu ...

  9. 关于Tomcat 6的热部署和热加载

    转载:http://blog.csdn.net/tianlincao/article/details/7263840 之前每当修改了类文件,保存后tomcat 都需要自动重启,今天作了后面的设置后,可 ...

  10. Hibernate逍遥游记-第12章 映射值类型集合-003映射List(<list-index>)

    1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...