LightOJ-1010 Knights in Chessboard

题目大意:有t个样例,输入列数n与行数m,问你国际象棋中的骑士(也就是“马”)最多能排多少个位置(0<t<=41000,1<=n,m<=200)
示意图:
图片说明
思路:一开始想着用dfs,但200肯定超时了,还是得找规律,百度了一下有如下规律,一行或一列的时候全部填满就好了。如果有两行或者两列的时候就按田字排,就是两行两列填上马后再两行两列空着,再继续填。其他情况的时候就是全部填白色的区域或者黑色的区域即可
代码如下:
#include

using namespace std;
char chess[205][205];
int ans=0;

int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++){
int m,n;
int a,b;
cin>>m>>n;
if(m==1||n==1)
{
ans=max(m,n);
}
else if(m==2||n==2)
{
if(m!=2)swap(m,n);
ans=n/44+min(2,n%4)2;//首先看有多少个块,最后一个块如果不满四个就利用min算个数
}
else
{
ans=(nm+1)/2;//如果是偶数时棋盘总数也是偶数,同时棋盘就黑白两种颜色,不管咋样都是行数列数/2,如果都是奇数时棋盘总数是奇数,这时候就要棋盘除以2+1的时候就是最多的棋子数量。
}
cout<<"Case "<<i<<": "<<ans<<endl;}
return 0;
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务