数学 HDOJ 5301 Buildings

题目传送门

 /*
题意:n*m列的矩阵,删除一个格子x,y。用矩形来填充矩阵。且矩形至少有一边是在矩阵的边缘上。
求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小。
分析:任何矩形都可以分为宽度为1的小矩形,所以只考虑矩形的可以的最小长度即可。
讨论方法:这里 (我不会。。。)
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll; int main(void) { //HDOJ 5301 Buildings
ll n, m, x, y;
while (scanf ("%I64d%I64d%I64d%I64d", &n, &m, &x, &y) == ) {
if (n > m) {
swap (n, m); swap (x, y);
}
if (x > n - x + ) {
x = n - x + ;
}
if (y > m - y + ) {
y = m - y + ;
}
ll hm = (m + ) / , hn = (n + ) / ;
ll ans = min (hm, hn);
if (m == n) {
if (m % == ) {
if (x == hn && y == hm) ans--;
}
}
else {
ll t = min (y, n - x);
ans = max (ans, t);
ans = min (ans, hm);
}
printf ("%I64d\n", ans);
} return ;
}
上一篇:ES5和ES6对象导出和导入(转载,待整理)


下一篇:【离散化】【DFS】Gym - 101617H - Security Badges