UVA 278 - Chess(数论)
时间:2014-04-29 13:45:20
收藏:0
阅读:381
题目链接:278 - Chess
题意:求出四种棋子最多放几个
思路:车能放行列的较小值,王隔着放,皇后根据八皇后问题可知,也是放行列最小值。
关键在于马,之前做过一题类似的,马分一行,两行,和两行以上考虑,一行就能全放,两行就隔一个田字格放,三行以上就每个马隔一个位置放。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int t, n, m;
char s[2];
int solve() {
if (s[0] == ‘r‘)
return min(n, m);
if (s[0] == ‘k‘) {
if (n == 1) return m;
if (m == 1) return n;
if (n == 2)
return (m / 2 * 2 + m % 2 * 2);
if (m == 2)
return (n / 2 * 2 + n % 2 * 2);
return (n * m + 1) / 2;
}
if (s[0] == ‘Q‘)
return min(n, m);
if (s[0] == ‘K‘)
return (n + 1) / 2 * ((m + 1) / 2);
}
int main() {
scanf("%d", &t);
while (t--) {
scanf("%s%d%d", s, &n, &m);
printf("%d\n", solve());
}
return 0;
}
评论(0)