您的位置:首页 > 其它

UVA - 696 How Many Knights

2015-03-20 19:57 471 查看
题目大意:给出一个n * m的网格,计算最多可以放置几个国际象棋中的骑士。

解题思路:分成三类来讨论:

1)min(n, m) == 1, 也就是无论怎么摆也不会影响到其他的骑士。

2)min(n, m) == 2, 这是将网格将网格分成2*4的若干部分,每个部分的前半部分放置骑士,主要注意模4后剩余部分的处理。

3)n * m的网格上间隔摆放(就是对应的黑格子或者白格子)(n * m - 1)/ 2

#include <cstdio>

int main() {
int m, n, ans;
while (scanf("%d%d", &m, &n), m + n) {
if (m == 1 || n == 1)
ans = m * n;
else if (m == 2 || n == 2)
ans = (m + n - 2) / 4 * 4 + ((m + n - 2) % 4 > 1 ? 4 : (m + n - 2) % 4 * 2);
else
ans = (m * n + 1) / 2;

printf("%d knights may be placed on a %d row %d column board.\n", ans, m, n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: