HDU 5301 Buildings 建公寓(逻辑,水)

题意:有一个包含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 建公寓(逻辑,水)的更多相关文章
- HDU 5301 Buildings 数学
Buildings 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5301 Description Your current task is to m ...
- hdu 5301 Buildings (2015多校第二场第2题) 简单模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子 ...
- HDU - 5301 Buildings
Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- HDU 5301 Buildings(2015多校第二场)
Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 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 ...
- bzoj4302 Hdu 5301 Buildings
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4302 [题解] 出自2015多校-学军 题意大概是给出一个n*m的格子有一个格子(x,y)是 ...
- HDU 2096 小明A+B --- 水题
HDU 2096 /* HDU 2096 小明A+B --- 水题 */ #include <cstdio> int main() { #ifdef _LOCAL freopen(&quo ...
- 数学 HDOJ 5301 Buildings
题目传送门 /* 题意:n*m列的矩阵,删除一个格子x,y.用矩形来填充矩阵.且矩形至少有一边是在矩阵的边缘上. 求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小. 分析:任何矩形 ...
- HDOJ/HDU 2560 Buildings(嗯~水题)
Problem Description We divide the HZNU Campus into N*M grids. As you can see from the picture below, ...
随机推荐
- CSS基础知识学习笔记
1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...
- 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= ...
- oracle——session
一.解释session web应用中,session是服务器段保存用户信息的一个对象,cookie是浏览器端保存用户信息的对象.今天了解了oracle也有session对象,那么什么是oracle的s ...
- PHP读取xml方法讲解
一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Marku ...
- 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 ...
- Firefox下网页缩放时防止div被挤到下一层
http://wu110cheng.blog.163.com/blog/static/13334965420121120102439190/ Firefox下网页缩放时防止div被挤到下一层 问题:三 ...
- POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)
#include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...
- kmeans理解
最近看到Andrew Ng的一篇论文,文中用到了Kmeans和DL结合的思想,突然发现自己对ML最基本的聚类算法都不清楚,于是着重的看了下Kmeans,并在网上找了程序跑了下. kmeans是unsu ...
- 关于Tomcat 6的热部署和热加载
转载:http://blog.csdn.net/tianlincao/article/details/7263840 之前每当修改了类文件,保存后tomcat 都需要自动重启,今天作了后面的设置后,可 ...
- Hibernate逍遥游记-第12章 映射值类型集合-003映射List(<list-index>)
1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...