程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu5301(2015多校2)--Buildings(構造)

hdu5301(2015多校2)--Buildings(構造)

編輯:C++入門知識

hdu5301(2015多校2)--Buildings(構造)


 

Buildings

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 472 Accepted Submission(s): 104



Problem Description Your current task is to make a ground plan for a residential building located in HZXJHS. So you must determine a way to split the floor building with walls to make apartments in the shape of a rectangle. Each built wall must be paralled to the building's sides.

The floor is represented in the ground plan as a large rectangle with dimensions $n imes m$, where each apartment is a smaller rectangle with dimensions $a imes b$ located inside. For each apartment, its dimensions can be different from each other. The number $a$ and $b$ must be integers.

Additionally, the apartments must completely cover the floor without one $1 imes 1$ square located on $(x,y)$. The apartments must not intersect, but they can touch.

For this example, this is a sample of $n=2,m=3,x=2,y=2$.

\


To prevent darkness indoors, the apartments must have windows. Therefore, each apartment must share its at least one side with the edge of the rectangle representing the floor so it is possible to place a window.

Your boss XXY wants to minimize the maximum areas of all apartments, now it's your turn to tell him the answer.
Input There are at most $10000$ testcases.
For each testcase, only four space-separated integers, $n,m,x,y(1leq n,m leq 10^8,n imes m > 1, 1leq x leq n, 1 leq y leq m)$.
Output For each testcase, print only one interger, representing the answer.
Sample Input
2 3 2 2
3 3 1 1

Sample Output
1
2

Hint
Case 1 :
\
You can split the floor into five $1 imes 1$ apartments. The answer is 1. Case 2:
\
You can split the floor into three $2 imes 1$ apartments and two $1 imes 1$ apartments. The answer is 2.
\
If you want to split the floor into eight $1 imes 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 
#include 
#include 
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
) ;
            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
, max(ans,max(min1,min2) )) ;
    }
    return 0 ;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved