LightOJ 1010 Knights in Chessboard

来源:互联网 发布:撕开照片衣服的软件 编辑:程序博客网 时间:2024/06/05 09:48

题目分析

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;}
0 0
原创粉丝点击