【Codeforces Round #645 (Div. 2) A】 Park Lighting

题目链接

【题目翻译】

其实就是让你用一个1*2(可以缩小为1*1)的方块去填充整个n*m的方格。 问你最少需要多少个方格。

【题解】

如果长和宽某一个是偶数,那么显然可以让长为2的边顺着那个方向摆放。

刚好需要\(n/2*m\)个,也即\(n*m/2\)

如果都是奇数的话,我们可以截出来一个长度为奇数的,宽为1的一列,然后让那一列竖着填。

\((n-1)/2+1\)个,然后剩下的\(n*(m-1)\)的,m-1肯定是偶数,所以答案是\((m-1)/2*n\)

总计\((n-1)/2+1+(m-1)*n/2=(n*m+1)/2\).

所以直接输出\((n*m+1)/2\)就好,向下取整。

不过写的时候没想那么多。就直接贪了。

【代码】

#include<bits/stdc++.h>
#define ll long long
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
using namespace std;

int n,m;

int main(){
    #ifdef LOCAL_DEFINE
        freopen("D:\\rush.txt","r",stdin);
    #endif
    int T;
    rei(T);
    while (T--){
        rei(n);rei(m);
        int cnt = 0;
        if (m&1){
            cnt += n/2;
            if(n&1) cnt++;
            m--;
        }
        cnt += n*(m/2);
        printf("%d\n",cnt);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/AWCXV/p/12970185.html