题意,在一个n*n的棋盘上放置一些马,使这些马不能互相攻击,问最多能放多少。
思路:从第一行每隔一个放置一个马即可,注意n=1和n=2的情况要特判.
#include<cstdio> int main(){ int n, m, t; scanf("%d", &t); for(int i = 1;i <= t;i ++){ scanf("%d%d", &n, &m); printf("Case %d: ", i); if(n == 1 || m == 1){ printf("%d ", n*m); continue; } if(n == 2 || m == 2){ if(m == 2) m = m^n, n = m^n, m=m^n; int tmp = m/4 * 4; if(m % 4 > 1) tmp += 4; else if(m % 4 == 1) tmp += 2; printf("%d ", tmp); continue; } if(m & 1){ if(n & 1) printf("%d ", m*(n/2)+m/2+1); else printf("%d ", m*n/2); }else { if(n & 1) printf("%d ", m*(n/2)+m/2); else printf("%d ", m*n/2); } } return 0; }