首页 > 代码库 > 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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。