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;
}


posted on 2014-08-06 23:19  ~Love()  阅读(124)  评论(0编辑  收藏  举报

导航