标签:

2 3 2 2 3 3 1 1
1 2HintCase 1 :You can split the floor into five $1 \times 1$ apartments. The answer is 1. Case 2: You can split the floor into three $2 \times 1$ apartments and two $1\times 1$ apartments. The answer is 2. If you want to split the floor into eight $1 \times 1$ apartments, it will be unacceptable because the apartment located on (2,2) can‘t have windows.
题目大意:有n*m的一个矩形地面,要建公寓,现在要求公寓里的房间怎么划分,要求每间房屋都为一个矩形,而且要有一侧为矩形的边,除(x,y)位置外不能有空余,(x,y)位置不能建房间,要让房屋面积最大的那个的面积尽量的小,问最小会是多少
如图,黑色的是(x,y),那么它的上下两块只可被有三个边的某一个覆盖掉,为了让最大的面积最小,要让宽为1,长为三边到空白方格的最小值,还有除了黑色部分的多于部分,要让他们被覆盖掉,可以用上下两条边来建房屋高为(m+1)/2,找出最大的。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
int main() {
int n , m , x , y , ans , min1 , min2 ;
while( scanf("%d %d %d %d", &n, &m, &x, &y) != EOF ) {
if( n > m ) {
swap(n,m) ;
swap(x,y) ;
}
if( n == 1 ) {
printf("1\n") ;
continue ;
}
min1 = min(x-1,min(y,m-y+1)) ;
min2 = min(n-x,min(y,m-y+1)) ;
ans = (n+1)/2 ;
if( n == m && n%2 && ans == x && ans == y )
ans-- ;
printf("%d\n", max(ans,max(min1,min2) )) ;
}
return 0 ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu5301(2015多校2)--Buildings(构造)
标签:
原文地址:http://blog.csdn.net/winddreams/article/details/47027869