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; }
相关文章推荐