博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Buildings 分类: ACM 多校 ...
阅读量:5116 次
发布时间:2019-06-13

本文共 2322 字,大约阅读时间需要 7 分钟。

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×m, where each apartment is a smaller rectangle with dimensions a×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×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(1≤n,m≤108,n×m>1,1≤x≤n,1≤y≤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×1 apartments. The answer is 1.

Case 2:

You can split the floor into three 2×1 apartments and two 1×1 apartments. The answer is 2.

If you want to split the floor into eight 1×1 apartments, it will be unacceptable because the apartment located on (2,2) can’t have windows.

题意是尽量把n*m的区域划分为多个,然后求最大的区域的面积。

要分成多个那么每个区域都可以表示成1*k。先看若是没有那个黑格子的话,可以得知答案就是(min(n,m)+1)/2;
但是由黑格子,现在就看黑格子在那个位置是否会对答案产生影响,详情看代码。然后还有一点容易忽略的是当n和m相等且同为奇数的话,要看看黑格子是否在正中,在正中位置答案减一。。

#include
#include
#include
#include
using namespace std;int main(){ int x,y,a,b; while(scanf("%d %d %d %d",&x,&y,&a,&b)!=EOF) { if(x>y) { swap(x,y); swap(a,b); } //cout<
<<" "<<
ans&&a-1!=x-a)//若是大于则区域的划分有 变化 { int d=min(left,right); int c=max(up,down); //ANS++; //cout<
<< " "<
<

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/NaCl/p/4700587.html

你可能感兴趣的文章
Blog文章待看
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
jQuery Mobile笔记
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>
OO5~7次作业总结
查看>>