lightoj-1010-Knights in Chessboard

題意:

給你一個n*m的棋盤,問你棋盤上最多放多少個馬,使得任意兩個馬都不會互相攻擊。

做法:

對於棋盤,我們會發現,如果我們只把馬放在白色的方格內,則任意兩個馬都不會互相攻擊。

這樣我們有了第一種放法,全放在白格內或者全放在黑格內。

但是有一些特殊情況。

假如n=min(n,m),m=max(n,m);

如果n=1,那麼我們可以在棋盤上全放上棋子。

如果n=2,那麼我們可以一次把一個田字格全部放上馬,然後間隔一個田字格,然後再放馬。

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
#define LL long long
int main()
{
    int T;
    scanf("%d",&T);
    int cas=0;
    while(T--)
    {
        cas++;
        int n,m,x,y;
        scanf("%d%d",&n,&m);
        if(n>m)swap(n,m);
        x=n*m;
        x=x/2;
        y=n*m-x;
        y=max(x,y);
        if(n==1)x=m;
        if(n==2)x=2*(2*(m/4)+min(2,m%4));
        printf("Case %d: %d\n",cas,max(x,y));
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章