lightoj 1010

题意,在一个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", 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\n", tmp);
continue;
}
if(m & 1){
if(n & 1) printf("%d\n", m*(n/2)+m/2+1);
else printf("%d\n", m*n/2);
}else {
if(n & 1) printf("%d\n", m*(n/2)+m/2);
else printf("%d\n", m*n/2);
}
}
return 0;
}
上一篇:sqlserver 中 lastindexof 功能


下一篇:PHP中的单例模式