首页 > 代码库 > UVA 278 - Chess(数论)

UVA 278 - Chess(数论)

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