您的位置:首页 > 其它

LightOJ 1010 Knights in Chessboard

2016-05-26 16:28 309 查看

题目分析

m,n都很大,因此用搜索肯定是行不通的,只能找规律,首先,我们会发现棋子放在白格子或者黑格子都不会互相攻击,但是有特殊情况需要考虑,一种就是如果之后一行或者一列,很显然这一行或者一列都可以放棋子,如果行数或者列数为2,那么我们可以将一个田字格放满,然后隔一个田字格不放任何东西,然后在继续放,以此类推。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int main()
{
int T;
scanf("%d", &T);
for(int kase = 1; kase <= T; kase++)
{
int m,n,ans;
scanf("%d%d", &m, &n);
if(m == 1 || n == 1)
ans = m*n;
else if(m == 2 || n == 2)
{
if(m == 2)
if(n%4 < 2)
ans = (n/4)*4 + (n%4)*2;
else
ans = (n/4)*4 + 4;
if(n == 2)
if(m%4 < 2)
ans = (m/4)*4 + (m%4)*2;
else
ans = (m/4)*4 + 4;
}
else
ans = (m*n+1)/2;
printf("Case %d: %d\n", kase, ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: