题目链接: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; }
UVA 278 - Chess(数论),码迷,mamicode.com
时间: 2024-10-06 00:17:05