题目:
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;
}