HDU 5301_Buildings
来源:互联网 发布:java 进程注入 编辑:程序博客网 时间:2024/06/04 20:04
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1360 Accepted Submission(s): 380
Total Submission(s): 1360 Accepted Submission(s): 380
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 dimensionsn×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 one1×1 square located on (x,y) . The apartments must not intersect, but they can touch.
For this example, this is a sample ofn=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.
The floor is represented in the ground plan as a large rectangle with dimensions
Additionally, the apartments must completely cover the floor without one
For this example, this is a sample of
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) .
For each testcase, only four space-separated integers,
Output
For each testcase, print only one interger, representing the answer.
Sample Input
2 3 2 23 3 1 1
Sample Output
12
这道题的意思是,给你一个矩阵,然后矩阵里面有个黑点,要你用更小的矩阵来覆盖这个大的矩阵,而且每个小的矩阵至少有一条边是在大矩阵的边缘上的,但是不能覆盖那个黑点,问,在所有覆盖大矩阵的方案中,哪个方案的最大矩阵面积最小。
这道题真的做了好久,也和别人讨论了一个下午,好吧,其实是我没有找到规律。这道题的做法是,首先弄个交换的函数,把大矩阵中大较大边长放到N,如果要交换,顺便拿x和y也要同时交换,从黑点出发,计算黑点上下左右四个小方块分别到另外三条边的距离,如果是黑点上面的点,就是求出到上面,左边和到右边的距离,取最小值,这样就有四个最小值,再取这四个最小值的最大值,再把这个最大值和较小边长的一半进行比较,取较大值,就是结果。其中要注意的是,当大矩阵的边长都是奇数而且相同,并且黑点在最中间的那个点,这种情况要单独讨论,WA了那么久就是WA在这。
#include<iostream>#include<algorithm>using namespace std;int main(){int n,m,x,y;while(cin>>n>>m>>x>>y){int answer=0;if(n==m&&n%2!=0&&x==y&&x==(n+1)/2){if(n==m) answer=(n+1)/2-1;}else{if(n>m) swap(n,m),swap(x,y);int ans=0;int nut=0;ans=(n+1)/2;nut=(m+1)/2;int a=0,b=0,c=0,d=0;a=min(y,min(x-1,m-y+1));b=min(y-1,min(x,n-x+1));c=min(n-x,min(y,m-y+1));d=min(n-x+1,min(x,m-y));int sum=0;sum=max(a,max(b,max(c,d)));answer=max(sum,min(ans,nut));}cout<<answer<<endl;}return 0;}
0 0
- HDU 5301_Buildings
- HDU 5301 - Buildings(技巧)
- hdu 5301 Buildings
- HDU 5301 思路题
- HDU - 5301 Buildings
- hdu 5301 Buildings
- HDU 5301 Buildings
- HDU 5301Buildings
- HDU 5301 Buildings
- hdu 5301 Buildings
- hdu 5301 Buildings
- HDU - 5301(构造)
- hdu 5301(枚举) Buildings
- HDU 5301 Buildings
- hdu 5301 Buildings
- HDU 5301 Buildings (乱搞)
- 4302: Hdu 5301 Buildings
- hdu
- 同步调用,回调,异步调用
- python map函数用法
- jvm相关参数,调优
- 数据库设计问题解决
- 关于AbsListView$RecycleBin.addScrapView的数组越界
- HDU 5301_Buildings
- Remove Linked List Elements
- 基础-数学-最大后验概率(MAP)maximum a posteriori
- 树-堆结构练习——合并果子之哈夫曼树
- 第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析
- 236 Lowest Common Ancestor of a Binary Tree
- dubbo基于http协议嵌入现有框架配置方法。
- swift创建unwind 过渡(unwind segue)
- hdu5308 I Wanna Become A 24-Point Master(构造)