您的位置:首页 > 产品设计 > UI/UE

HDU 5301 - Buildings(技巧)

2015-07-23 22:53 435 查看
题目:

http://acm.hdu.edu.cn/showproblem.php?pid=5301

题意:

n*m矩阵,黑格子的位置是(x,y),将剩下位置划分为多个矩阵,每个矩阵必须接触边缘,求出划分矩阵的最大最小面积。

思路:

将所有的矩阵都变成n<m的矩阵,先算出没有黑格子的最大最小面积,加入黑格子时:

如果黑格在两边或者在中线 上下,则面积不变,否则再讨论。

AC.

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
// freopen("in", "r", stdin);
int n, m, x, y;
int cnt;
while(~scanf("%d %d %d %d", &n, &m, &x, &y)) {
if(n > m) {
swap(n, m);
swap(x, y);
}

if(n == m && n%2 && x == (n+1)/2 && y == (m+1)/2) {
printf("%d\n", n/2);
continue;
}

int maxx = n/2+n%2;

cnt = maxx;
if(x == maxx || x == maxx+1 || y == 1 || y == m) {
printf("%d\n", cnt);
}

else {
int res, ans1, ans2;

int c = max(x-1, n-x);
ans1 = min(y, m - y+1);
if(ans1 <= maxx) printf("%d\n", cnt);
else printf("%d\n", min(c, ans1));
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU