题意:给你一个n*m的地图,之后往地图上放马,马可以条8个方向(和中国象棋的马的跳法一样,但是马不是放在点上的而是放在格子里的),现在问你这n*m个地图里最多可以放几匹马
思路:
看图我们可以知道的是,马在黑色的格子里只能跳到白色的格子上,白色的格子只能跳到黑色的格子上,所以我们只需要将马放在黑色或者白色的格子上就好了,在一般情况下,他们的数量都是相等的,但是在n和m都是奇数的时候,他们会相差1,所以最后的值是当n和m都是奇数的时候的答案是n*m/2+1,其他情况是n*m/2,需要注意当n或者m是1或者是2的时候,前者可以直接放一排,而后者可以4个4个放(可以画个图)
上代码把
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
if(n == 1 || m == 1)
{
printf("%d\n",m == 1 ? n : m);
}
else if(n == 2 || m == 2)
{
if(m == 2) swap(n,m);
int ans = m/4*4;
if(m%4 == 1)
{
ans+=2;
}
else if(m%4!=0)
{
ans+= 4;
}
printf("%d\n",ans);
}
else
{
if(n*m%2 == 0)
{
printf("%d\n",n*m/2);
}
else printf("%d\n",n*m/2+1);
}
}
}